アクセストークン/OAuthベースèªè¨¼ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
OAuth(Open Authorization)ã¯ã€ãƒˆãƒ¼ã‚¯ãƒ³ãƒ™ãƒ¼ã‚¹ã®èªè¨¼ãƒ»æ‰¿èªãƒ—ãƒãƒˆã‚³ãƒ«ã«é–¢ã™ã‚‹ã‚ªãƒ¼ãƒ—ンスタンダードã§ã€ã‚·ãƒ³ã‚°ãƒ«ã‚µã‚¤ãƒ³ã‚ªãƒ³ï¼ˆSSO)をæä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚OAuthを使用ã™ã‚‹ã¨ã€Facebookãªã©ã®ã‚µãƒ¼ãƒ‰ãƒ‘ーティーサービスãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを公開ã™ã‚‹ã“ã¨ãªãã€ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«é–¢ã™ã‚‹ç‰¹å®šã®æƒ…å ±ã‚’ä½¿ç”¨ã§ãã¾ã™ã€‚OAuthã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä»£ã‚ã£ã¦ä»²ä»‹è€…ã¨ã—ã¦æ©Ÿèƒ½ã—ã€ç‰¹å®šã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆæƒ…å ±ã®å…±æœ‰ã‚’承èªã™ã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ã‚µãƒ¼ãƒ“ã‚¹ã«æä¾›ã—ã¾ã™ã€‚
ã“ã®Drupal APIèªè¨¼æ–¹æ³•ã¯ã€OAuth 2.0プãƒãƒˆã‚³ãƒ«ã‚’使用ã—ã¦ã‚»ã‚ュリティアクセストークンをå–å¾—ã—ã¾ã™ã€‚ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã¯ã€DrupalサイトAPIã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’èªè¨¼ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚OAuthメソッドã¯é«˜åº¦ã«æš—å·åŒ–ã•れãŸå®‰å…¨ãªã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æä¾›ã—ã€Drupal APIãŒã—ã£ã‹ã‚Šã¨ä¿è·ã•れるã“ã¨ã‚’ä¿è¨¼ã—ã¾ã™ã€‚ã“れã¯ã€Drupalã®RESTã¾ãŸã¯JSON:APIエンドãƒã‚¤ãƒ³ãƒˆã¸ã®ä¸æ£ã‚¢ã‚¯ã‚»ã‚¹ã‚’é˜²ãæœ€ã‚‚å®‰å…¨ãªæ–¹æ³•ã®1ã¤ã¨è€ƒãˆã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯Drupal 7ã€Drupal 8ã€Drupal 9ã€Drupal 10ã€Drupal 11ã¨äº’æ›æ€§ãŒã‚りã¾ã™ã€‚
セットアップ動画:
OAuth 2.0ã§ã¯ã€ä»¥ä¸‹ã®3者ã®å½“事者ãŒé–¢ä¸Žã—ã¾ã™ï¼š
- ユーザーã¯ã€APIを通ã˜ã¦ã‚¢ã‚¯ã‚»ã‚¹ã•れるデータを所有ã—ã¦ãŠã‚Šã€ã‚¢ãƒ—リケーションãŒãã®ãƒ‡ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã—ãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
- アプリケーションã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä»£ã‚ã£ã¦APIを通ã˜ã¦ãƒ‡ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
- APIエンドãƒã‚¤ãƒ³ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‡ãƒ¼ã‚¿ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御・許å¯ã—ã¾ã™ã€‚
APIã¯ã€ã‚¢ãƒ—リケーションã‹ã‚‰æœ‰åйãªã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å—ã‘å–ã£ãŸå ´åˆã®ã¿ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚アプリケーションãŒã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹æ–¹æ³•ã¯ã€ä½¿ç”¨ä¸ã®OAuthスã‚ームã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚
剿æ¡ä»¶ï¼šãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ï¼š
- Drupal REST & JSON API Authentication モジュールをダウンãƒãƒ¼ãƒ‰ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚
- REST UI:ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€RESTモジュールをè¨å®šã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã¾ã™ã€‚
- Drupalサイトã®Extendセクション(/admin/modules)ã‹ã‚‰ä»¥ä¸‹ã®Webサービスモジュールを有効ã«ã—ã¾ã™ï¼š
- JSON: API
- REST UI
- RESTful Web Services
- Serialization

OAuth/アクセストークンベースã®APIèªè¨¼ã‚’è¨å®šã™ã‚‹æ‰‹é †ï¼š
- ç†è§£ã‚’æ·±ã‚ã‚‹ãŸã‚ã€Drupalã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±å–å¾—APIã«OAuth/アクセストークンベースã®èªè¨¼ã‚’è¿½åŠ ã™ã‚‹ä¾‹ã‚’見ã¦ã„ãã¾ã™ã€‚
- ã”æ³¨æ„ãã ã•ㄠ:Drupalã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±å–å¾—APIã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚
APIを有効ã«ã—ã¦ã€ãƒ¡ã‚½ãƒƒãƒ‰ã¨æ“作を次ã®ã‚ˆã†ã«å‰²ã‚Šå½“ã¦ã¾ã™ï¼š
- 最åˆã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€APIを有効ã«ã—ã€ãã®ç‰¹å®šã®APIã§è¨±å¯ã•ã‚Œã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã¨æ“作を割り当ã¦ã‚‹ã“ã¨ã§ã™ã€‚ã“れã¯REST UIモジュールを使用ã—ã¦è¡Œã†ã‹ã€è¨å®šã‚’直接変更ã™ã‚‹ã“ã¨ã§è¡Œãˆã¾ã™ã€‚
- REST UI モジュールを使用ã—ã¦APIを有効ã«ã™ã‚‹ã«ã¯ã€REST UIモジュール㮠Configure ボタンをクリックã—ã¾ã™ï¼ˆä¸‹å›³å‚照)

- ã“ã®ä¾‹ã§ã¯ã€ Content セクションã«ã‚ã‚‹ /user/{user} APIを有効ã«ã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚ãã®å‰ã«ã‚ã‚‹ Enable オプションを使用ã—ã¦ã“ã®APIを有効ã«ã—ã¾ã™ã€‚

- 目標ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’å–å¾—ã™ã‚‹ã“ã¨ãªã®ã§ã€ä»¥ä¸‹ã®è¨å®šã‚’é¸æŠžã—ã¾ã™ï¼š
- メソッド: GET
- フォーマット: json
- èªè¨¼ãƒ—ãƒãƒã‚¤ãƒ€ãƒ¼ï¼š rest_api_authentication
- ã“れã«ã‚ˆã‚Šã€miniOrange REST API AuthenticationモジュールãŒAPIã‚’èªè¨¼ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚続行ã™ã‚‹ã«ã¯ Save Configuration ボタンをクリックã—ã¾ã™ã€‚

OAuth/アクセストークンベースã®APIèªè¨¼ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—:
- ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€OAuth/アクセストークンをAPIèªè¨¼æ–¹æ³•ã¨ã—ã¦è¨å®šã—ã¾ã™ã€‚ãã®ãŸã‚ã«ã€REST API Authenticationモジュールã®API Authenticationタブã«ç§»å‹•ã—ã¦ãã ã•ã„ (/admin/config/people/rest_api_authentication/auth_settings)
- Enable Authentication ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’é¸æŠžã—〠Save Settings ボタンをクリックã—ã¾ã™ã€‚
- Save Settingsボタンã®ä¸‹ã§ OAuth/Access Token ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚’é¸æŠžã—ã¾ã™ã€‚
- 次㫠Generate a new Client ID & Secret ボタンをクリックã—ã¾ã™ã€‚
- Client IDã¨Secretã¯ã€å¾Œã§Get User Info APIã®èªè¨¼æ™‚ã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã€æ‰‹å…ƒã«ä¿ç®¡ã—ã¦ãŠã„ã¦ãã ã•ã„。

ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹æ¨©é™ã‚’Drupalãƒãƒ¼ãƒ«ã«ä»˜ä¸Žã—ã¾ã™ï¼š
- å¿…è¦ã§ã‚れã°ã€éžç®¡ç†è€…ã®Drupalãƒãƒ¼ãƒ«ã«ã‚‚ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹æ¨©é™ã‚’付与ã§ãã¾ã™ã€‚Drupalã‚µã‚¤ãƒˆã®æ¨©é™ã‚»ã‚¯ã‚·ãƒ§ãƒ³ (/admin/people/permissions) ã«ã‚ã‚‹ View User Information 権é™ã«Drupalãƒãƒ¼ãƒ«ã‚’割り当ã¦ã‚‹ã“ã¨ã§å®Ÿç¾ã§ãã¾ã™ã€‚

ã“れã§å®Œäº†ã§ã™ï¼ï¼ï¼
ãれã§ã¯ã€èªè¨¼ã«OAuth/アクセストークンを使用ã—ã¦ã€API呼ã³å‡ºã—を通ã˜ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’å–å¾—ã—ã¦ã¿ã¾ã—ょã†
例:
- ã¾ãšã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹ãŸã‚ã®API呼ã³å‡ºã—を行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚次ã«ã€ã“れを使用ã—ã¦Drupal APIã‚’èªè¨¼ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æƒ…å ±ã‚’å–å¾—ã—ã¾ã™ã€‚
- miniOrange API Authenticationモジュールã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã‚‹2ã¤ã®ã‚°ãƒ©ãƒ³ãƒˆã‚¿ã‚¤ãƒ—をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ï¼š
パスワードグラント:
- パスワードグラントã§ã¯ã€REST API Authenticationモジュールã«ã‚ˆã£ã¦ç™ºè¡Œã•れãŸClient IDã¨ã¨ã‚‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Drupalユーザーåã¨ãƒ‘スワードをå«ã‚€POSTリクエストをé€ä¿¡ã™ã‚‹ã“ã¨ã§ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã§ãã¾ã™ã€‚
リクエスト: POST <drupal_base_url>/rest_api/access_token
ボディ:
grant_type = password
username = <drupal_username>
password = <drupal_password>
client_id = <client_id>
CURLå½¢å¼ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ-
curl --location --request POST '<your_drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id= <drupal_client_id>' \
--data-urlencode 'username=<drupal_username >\
--data-urlencode 'password=<drupal_password>'
- 以下ã«è¿½åŠ ã•れãŸPostmanリクエストã®ç”»åƒã‚‚å‚ç…§ã§ãã¾ã™ï¼š

ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè³‡æ ¼æƒ…å ±ã‚°ãƒ©ãƒ³ãƒˆï¼š
- ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè³‡æ ¼æƒ…å ±ã‚°ãƒ©ãƒ³ãƒˆã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Drupalユーザーåã¨ã¨ã‚‚ã«ã€API Authenticationモジュールã«ã‚ˆã£ã¦ç™ºè¡Œã•れãŸClient IDã¨Client Secretã‚’å«ã‚€POSTリクエストをé€ä¿¡ã™ã‚‹ã“ã¨ã§ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã§ãã¾ã™ã€‚
リクエスト: POST <drupal_base_url>/rest_api/access_token
ボディ:
grant_type = client_credentials
client_id = <client_id>
client_secret = <client_secret>
Username = <drupal_username>
CURLリクエスト形å¼-
curl --location --request POST '<drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<Client_ID>' \
--data-urlencode 'username=<drupal_username>' \
--data-urlencode 'client_secret=<Client_secret>'
- ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè³‡æ ¼æƒ…å ±ã‚°ãƒ©ãƒ³ãƒˆã‚’ä½¿ç”¨ã—ã¦Drupalã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹ãŸã‚ã®Postmanリクエストã®ç”»åƒã‚‚å‚ç…§ã§ãã¾ã™ã€‚

- æˆåŠŸã™ã‚‹ã¨ã€ãƒˆãƒ¼ã‚¯ãƒ³ã®æœ‰åŠ¹æœŸé™ã¨ãƒˆãƒ¼ã‚¯ãƒ³ã‚¿ã‚¤ãƒ—ã¨ã¨ã‚‚ã«ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŒè¿”ã•れã¾ã™ï¼ˆä¸‹ã®ç”»åƒã‚’å‚照)

エラーレスãƒãƒ³ã‚¹ï¼š
| エラー | 説明 |
| INVALID_CREDENTIALS |
ユーザーåã¾ãŸã¯ãƒ‘スワードã®ã„ãšã‚Œã‹ãŒæ£ã—ããªã„å ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚ 例: |
| INVALID_CLIENT_ID |
誤ã£ãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIDã‚’é€ä¿¡ã—ãŸå ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚ 例: |
| INVALID_CLIENT_SECRET |
誤ã£ãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIDã‚’é€ä¿¡ã—ãŸå ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚ 例: |
| MISSING_USERNAME |
リクエストã®é€ä¿¡æ™‚ã«ãƒ‘ラメータをé€ã‚Šå¿˜ã‚ŒãŸå ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚ 例: |
Drupal Documentationã‹ã‚‰ã®è¨˜äº‹ã€‚