イントロダクション

Authorization Basic ヘッダは、標準 に従って FIWARE IdM によって提供される Client ID および Client Secret のクレデンシャルを使用して構築されます。したがって、文字列は

base64(client_id:client_secret)

redirect_uri パラメータは、アプリケーション登録で提供される Callback URL 属性と一致する必要があります。

認可コード・フロー (Authorization Code Flow) を介した OIDC

認可コード・フロー (Authorization Code Flow) は、認証メカニズムをサポートする ように調整できます。OIDC は認可コード自体のフローを変更しませんが、 以下に示すように、認証エンドポイントへのリクエストにパラメータを追加するだけです。 レスポンスは、ユーザを識別する id_token と交換できるアクセス・コードを返します。

認可リクエスト (Authorization Request)

GET /oauth2/authorize?response_type=code&client_id=1&state=xyz
&scope=openid&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcallback_url HTTP/1.1
Host: idm-portal
必要なクエリ・パラメータは、OAuth 2.0 認可コード・グラント (authorization code grant) に必要なものと同じです。これらに加えて、OIDC リクエストには openid スコープ値を含める 必要があります。openid が存在しない場合、リクエストは OAuth 2.0 リクエストとして処理されます。

認可レスポンス (Authorization Response)

HTTP/1.1 302 Found
Location: https://client.example.com/callback_url?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

アクセス・トークン・リクエスト (Access Token Request)

POST /oauth2/token HTTP/1.1
Host: idm-portal
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcallback_url

アクセス・トークン・レスポンス (Access Token Response)

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
    "id_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25zIjpbXSwiZGlzcGxheU5hbWUiOiIiLCJyb2xlcyI6W10sImFwcF9pZCI6IjNjYzE2NTM4LThiOTYtNGE3Ny1iMDY3LWQwMTZhNTI5ZmNjMyIsInRydXN0ZWRfYXBwcyI6W10sImlzR3JhdmF0YXJFbmFibGVkIjpmYWxzZSwiaW1hZ2UiOiIiLCJlbWFpbCI6ImFkbWluQHRlc3QuY29tIiwiaWQiOiJhZG1pbiIsImF1dGhvcml6YXRpb25fZGVjaXNpb24iOiIiLCJhcHBfYXpmX2RvbWFpbiI6IiIsImVpZGFzX3Byb2ZpbGUiOnt9LCJhdHRyaWJ1dGVzIjp7fSwidXNlcm5hbWUiOiJhZG1pbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwNSIsInN1YiI6ImFkbWluIiwiYXVkIjoiM2NjMTY1MzgtOGI5Ni00YTc3LWIwNjctZDAxNmE1MjlmY2MzIiwiZXhwIjoxNTk0MjA0MzcyLCJpYXQiOjE1OTQyMDA3NzIsImF0X2hhc2giOiIwWlJ2R1JlRlFnM3RRa2oxZERyMktBPT0ifQ.Q-nSH5YthDY7ljNa9_5-4CtKOuqHYSsNr0Rb0ppd4os",
    "token_type":"jwt"
}

暗黙的なフロー (Implicit Flow) を介した OIDC

暗黙的なフロー (Implicit Flow) は、認証メカニズムをサポートするように適合させる こともできます。OIDC は、認可コード・グラント (authorization code grant) と同様に、フローを変更せずに、リクエストの response_type を変更します。 このフローは、暫定的なアクセス・コード (an interim access-code) を返すのではなく、 id_token を直接返します。これは、認可コード・フローほど安全ではありませんが、 一部のクライアント・サイドのアプリケーションで使用できます

認可リクエスト (Authorization Request)

GET /oauth2/authorize?response_type=id_token&client_id=1&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcallback_url HTTP/1.1
Host: idm-portal

response_type 属性は必須であり、id_token に設定する必要があります。

client_id 属性は、アプリケーション登録時に FIWARE IdM によって提供されるものです。

redirect_uri 属性は、アプリケーション登録内で IdM に提供される Callback URL 属性と一致する必要があります。

state はオプションであり、必要に応じてアプリケーションを内部で使用するためのものです。

アクセス・トークン・レスポンス (Access Token Response)

HTTP/1.1 302 Found
Location: https://client.example.com/callback_url?id_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25zIjpbXSwiZGlzcGxheU5hbWUiOiIiLCJyb2xlcyI6W10sImFwcF9pZCI6IjNjYzE2NTM4LThiOTYtNGE3Ny1iMDY3LWQwMTZhNTI5ZmNjMyIsInRydXN0ZWRfYXBwcyI6W10sImlzR3JhdmF0YXJFbmFibGVkIjpmYWxzZSwiaW1hZ2UiOiIiLCJlbWFpbCI6ImFkbWluQHRlc3QuY29tIiwiaWQiOiJhZG1pbiIsImF1dGhvcml6YXRpb25fZGVjaXNpb24iOiIiLCJhcHBfYXpmX2RvbWFpbiI6IiIsImVpZGFzX3Byb2ZpbGUiOnt9LCJhdHRyaWJ1dGVzIjp7fSwidXNlcm5hbWUiOiJhZG1pbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwNSIsInN1YiI6ImFkbWluIiwiYXVkIjoiM2NjMTY1MzgtOGI5Ni00YTc3LWIwNjctZDAxNmE1MjlmY2MzIiwiZXhwIjoxNTk0MjA0NjAwLCJpYXQiOjE1OTQyMDEwMDB9.4zd2dgoxyhU93QlhEVXXUMYaKLju8e0TZwlis_nvazc&state=xyz

ハイブリッド・フロー (Hybrid Flow) を介した OIDC

ハイブリッド・フロー (Hybrid Flow) は、認可コードと暗黙的なグラントを組み合わせます。 アプリケーションのフロント・エンドとバック・エンドでプロセスを並列化すると便利です。 フローは認可コード・グラントに似ていますが、この場合、トークンは認可とトークンの エンドポイントの両方で生成されます。

認可リクエスト (Authorization Request)

GET /oauth2/authorize?response_type=code id_token token&client_id=1&scope=openid&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcallback_url HTTP/1.1
Host: idm-portal

ハイブリッド・フローを介してリクエストを処理するには、response_typecode id_token token に設定する必要があります。

client_id 属性は、アプリケーション登録時に FIWARE IdM によって提供されるものです。

redirect_uri 属性は、アプリケーション登録内で IdM に提供される Callback URL 属性と一致する必要があります。

state はオプションであり、必要に応じてアプリケーションを内部で使用するためのものです。

これらに加えて、OIDC リクエストには、openid スコープ値を含めることができます。 openid が存在する場合、生成されたコードは id_token と交換されます。

認可レスポンス (Authorization Response)

HTTP/1.1 302 Found
Location: https://client.example.com/callback_url?id_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25zIjpbXSwiZGlzcGxheU5hbWUiOiIiLCJyb2xlcyI6W10sImFwcF9pZCI6IjNjYzE2NTM4LThiOTYtNGE3Ny1iMDY3LWQwMTZhNTI5ZmNjMyIsInRydXN0ZWRfYXBwcyI6W10sImlzR3JhdmF0YXJFbmFibGVkIjpmYWxzZSwiaW1hZ2UiOiIiLCJlbWFpbCI6ImFkbWluQHRlc3QuY29tIiwiaWQiOiJhZG1pbiIsImF1dGhvcml6YXRpb25fZGVjaXNpb24iOiIiLCJhcHBfYXpmX2RvbWFpbiI6IiIsImVpZGFzX3Byb2ZpbGUiOnt9LCJhdHRyaWJ1dGVzIjp7fSwidXNlcm5hbWUiOiJhZG1pbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwNSIsInN1YiI6ImFkbWluIiwiYXVkIjoiM2NjMTY1MzgtOGI5Ni00YTc3LWIwNjctZDAxNmE1MjlmY2MzIiwiZXhwIjoxNTk0MjA0NjAwLCJpYXQiOjE1OTQyMDEwMDB9.4zd2dgoxyhU93QlhEVXXUMYaKLju8e0TZwlis_nvazc&state=xyz&code=6987825d204b88d4310aa04c386581f5444e78ea&token=44a5bdf6997aa1dce2c0ab3e96ca00ef92813fad&token_type=bearer&expires_in=3600

アクセス・トークン・リクエスト (Access Token Request)

POST /oauth2/token HTTP/1.1
Host: idm-portal
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=hybrid&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcallback_url

アクセス・トークン・レスポンス (Access Token Response)

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{ access_token: '810030c50902f046fc73a69f15dc0e9270318efe',
  token_type: 'bearer',
  id_token:
   'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmdhbml6YXRpb25zIjpbXSwiZGlzcGxheU5hbWUiOiIiLCJyb2xlcyI6W10sImFwcF9pZCI6IjNjYzE2NTM4LThiOTYtNGE3Ny1iMDY3LWQwMTZhNTI5ZmNjMyIsInRydXN0ZWRfYXBwcyI6W10sImlzR3JhdmF0YXJFbmFibGVkIjpmYWxzZSwiaW1hZ2UiOiIiLCJlbWFpbCI6ImFkbWluQHRlc3QuY29tIiwiaWQiOiJhZG1pbiIsImF1dGhvcml6YXRpb25fZGVjaXNpb24iOiIiLCJhcHBfYXpmX2RvbWFpbiI6IiIsImVpZGFzX3Byb2ZpbGUiOnt9LCJhdHRyaWJ1dGVzIjp7fSwidXNlcm5hbWUiOiJhZG1pbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwNSIsInN1YiI6ImFkbWluIiwiYXVkIjoiM2NjMTY1MzgtOGI5Ni00YTc3LWIwNjctZDAxNmE1MjlmY2MzIiwiZXhwIjoxNTk0MjA0OTg1LCJpYXQiOjE1OTQyMDEzODV9.eq5zEqKYRZdT1v1DrvJNvSIHqFOJUtqhh-ZIdfM-Pnw',
  expires_in: 3599,
  refresh_token: '9c49c69cc9fb9811d32a0c75985186bb5def37f3',
  scope: [ 'openid' ] }

ID Tokens を検証

ユーザに関連付けられた ID Token を作成したら、アプリケーションに関連付けられた シークレットを使用してそれを検証できます。最後に、次の情報を取得するために、 ID Token のペイロードをデコードできます:

    {
      "organizations": [
        {
          "id": "13e88767-7473-472d-9c33-110c5bed2a57",
          "name": "test_org",
          "description": "my org",
          "website": null,
          "roles": [
            {
              "id": "9c4e8db4-a56b-4731-bfc6-7dd8fb2fbea3",
              "name": "test"
            }
          ]
        }
      ],
      "displayName": "My User",
      "roles": [
        {
          "id": "9c4e8db4-a56b-4731-bfc6-7dd8fb2fbea3",
          "name": "test"
        }
      ],
      "app_id": "ff03921a-a772-4220-9854-e2d499ae474a",
      "isGravatarEnabled": false,
      "email": "myuser@test.com",
      "id": "myuser",
      "authorization_decision": "",
      "app_azf_domain": "",
      "username": "myuser",
      "iss":"http://localhost:3005",
      "sub":"admin",
      "aud":"3cc16538-8b96-4a77-b067-d016a529fcc3",
      "exp":1594204985,
      "iat":1594201385
    }