OpenID Connect (OIDC) は、OAuth 2.0 を基盤として拡張された認証プロトコルで、認証を行ったメンバーの情報を安全に取得できます。
認証により、API を呼び出すことができる Access Token と、ユーザー情報を含む ID Token の両方を取得することができ、ID Token は SSO で利用できます。
ID Token は、User Account 認証で利用できます。
認証により、API を呼び出すことができる Access Token と、ユーザー情報を含む ID Token の両方を取得することができます。
詳しくは User Account 認証 を参照してください。
注意
- ID Tokenは、User Account 認証でのみ発行できます。Service Account 認証では発行できません。
以下の項目をすべて確認し、ID Token を検証します。
Access Token は以下の手順で検証します。
検証によって正当性を確認後 ID Token を利用してください。ID Token に認証を行ったメンバー情報が含まれています。
下記の ID Token の仕様 を参照してください。
ID Token は、ヘッダー、ペイロード、署名からなる、JSON Web Signature (JWS) で署名された JSON Web Token (JWT) です。
| パラメータ | Required | 説明 |
|---|---|---|
| typ | Required | "JWT" |
| alg | Required | "RS256" |
| kid | Required | 署名の検証に用いる Key の一意となる Key ID |
| claim | Required | 説明 |
|---|---|---|
| iss | Required | 発行者 openid-configuration の issuer と一致しなければならない |
| sub | Required | userID |
| aud | Required | Developer Console で発行した、アプリの client ID |
| nonce | Optional | authorize リクエスト時に指定した nonce 値 authorize リクエスト時に nonce が指定されていた場合には required |
| Optional | LINE WORKS アカウント 通常は電子メール形式であり、ドメインがグループ名を使用する場合には、電子メール形式ではない可能性がある email Scope を指定した場合に含まれる | |
| name | Optional | 氏名 profile Scope を指定した場合に含まれる |
| locale | Optional | 言語コード (ja_JP, ko_KR, en_US, zh_CN, zh_TW) profile Scope を指定した場合に含まれる |
| exp | Required | JWT 満了時刻 Unix time で表し、単位は秒 (sec) 1 時間後に満了する |
| iat | Required | JWT 生成時刻 Unix time で表し、単位は秒 (sec) |
| at_hash | Optional | Access Token の hash 値 Access Token の validation チェック で利用する Implicit Flow では required |
| email_verified | Optional | LINE WORKS で生成したアカウントであるため、常に true email Scope を指定した場合に含まれる |
| family_name | Optional | 姓 profile Scope を指定した場合に含まれる |
| given_name | Optional | 名 profile Scope を指定した場合に含まれる |
LINE WORKS の OIDC 構成情報を取得します。 OpenID Connect Discovery 1.0 に従います。
https://auth.worksmobile.com/{tenantId}/.well-known/openid-configurationGET
| パラメータ | タイプ | 説明 |
|---|---|---|
| tenantId | String | Tenant Id |
curl -location -request GET 'https://auth.worksmobile.com/1111/.well-known/openid-configuration'HTTP 200 OK
| パラメータ | タイプ | 説明 |
|---|---|---|
| issuer | String | 発行者 |
| authorization_endpoint | String | OAuth 2.0 Authorization Endpoint URL |
| token_endpoint | String | OAuth2.0 Token Endpoint URL |
| revocation_endpoint | String | OAuth2.0 Revocation Endpoint URL |
| end_session_endpoint | String | OIDC Logout Endpoint URL |
| jwks_uri | String | JSON Web Key Set の提供 URL |
| userinfo_endpoint | String | UserInfo Endpoint URL |
| scopes_supported | array (String) | OIDC でサポートする Scope のリスト |
| response_types_supported | array (String) | OIDC がサポートする response_type のリスト |
| grant_types_supported | array (String) | OIDC でサポートする grant_type のリスト |
| subject_types_supported | array (String) | 識別子の提供方式 |
| id_token_signing_alg_values_supported | array (String) | id_token の署名アルゴリズム |
| token_endpoint_auth_methods_supported | array (String) | トークン エンドポイントでサポートされる認証方式のリスト |
| claims_supported | array (String) | id_token claim でサポートする項目のリスト |
{ "issuer": "https://auth.worksmobile.com", "authorization_endpoint": "https://auth.worksmobile.com/oauth2/v2.0/authorize", "token_endpoint": "https://auth.worksmobile.com/oauth2/v2.0/token", "revocation_endpoint": "https://auth.worksmobile.com/oauth2/v2.0/revoke", "end_session_endpoint": "https://auth.worksmobile.com/oauth2/v2.0/logout", "jwks_uri": "https://auth.worksmobile.com/oauth2/v2.0/certs/1111", "userinfo_endpoint": "https://auth.worksmobile.com/oauth2/v2.0/userinfo", "scopes_supported": [ "openid", "email", "profile" ], "response_types_supported": [ "code", "id_token", "token id_token" ], "grant_types_supported": [ "authorization_code", "implicit", "refresh_token" ], "subject_types_supported": [ "public" ], "id_token_signing_alg_values_supported": [ "RS256" ], "token_endpoint_auth_methods_supported": [ "client_secret_post" ], "claims_supported": [ "iss", "aud", "sub", "iat", "exp", "email", "email_verified", "family_name", "given_name", "name", "locale", "app_ver" ]}ID Token の署名の検証に使用する公開鍵情報を返します。公開鍵情報は 30 日ごとに更新されます。
https://auth.worksmobile.com/oauth2/v2.0/certs/{tenantId}GET
OK
| パラメータ | タイプ | 説明 |
|---|---|---|
| kty | String | Key Type "RSA" (固定) |
| use | String | Public Key User "sig" (signature) (固定) |
| alg | String | Algorithm "RS256" (固定) |
| kid | String | Key ID 一意となる Key の ID |
| e | String | Exponent RSA アルゴリズムの公開鍵指数部分 ※符号は含まれない |
| n | String | Modulus RSA アルゴリズムの公開鍵モジュラス(係数)部分 ※符号は含まれない |
{ "keys": [ { "kty": "RSA", "use": "sig", "alg": "RS256", "kid": "gnwk3n8rna", "e": "AQAB", "n": "ge42jbjjksdgajh23bjtaeg" }, { "kty": "RSA", "use": "sig", "alg": "RS256", "kid": "wlgoai49eg", "e": "AQAB", "n": "kfiwuheg8skhvbgi23ligoh" } ]}Access Token を使用して、認証されたユーザーの情報を取得します。 OpenID Connect Core 1.0 > UserInfo Endpoint に従います。
参考
- UserInfo Endpoint を呼び出すには、Access Token の発行時の scope に openid を含む必要があります。
- レスポンスに含まれるユーザー情報は、Access Token の発行時に指定した Scope により異なります。
https://auth.worksmobile.com/oauth2/v2.0/userinfoGET / POST
| ヘッダー | タイプ | Required | 説明 |
|---|---|---|---|
| Authorization | String | Y | Bearer {access_token} 発行された Access Token を指定する |
curl -location -request GET 'https://auth.worksmobile.com/oauth2/v2.0/userinfo' \--header 'Authorization: Bearer jp1AAAAwQ...'| claim | タイプ | 説明 |
|---|---|---|
| sub | String | UserID |
| String | LINE WORKS アカウント email Scope を指定した場合に含まれる | |
| email_verified | Boolean | LINE WORKS で生成したアカウントであるため、常に true email Scope を指定した場合に含まれる |
| name | String | 氏名 profile Scope を指定した場合に含まれる |
| family_name | String | 姓 profile Scope を指定した場合に含まれる |
| given_name | String | 名 profile Scope を指定した場合に含まれる |
| locale | String | 言語コード (ja_JP, ko_KR, en_US, zh_CN, zh_TW) profile Scope を指定した場合に含まれる |
{ "sub": "1234567890", "email": "user@example.com", "email_verified": true, "name": "ワークス太郎", "family_name": "ワークス", "given_name": "太郎", "locale": "ja_JP"}{ "sub": "1234567890"}WWW-Authenticate: Bearer error="invalid_token", error_description="The access token is invalid or has expired"WWW-Authenticate: Bearer error="insufficient_scope", error_description="The access token does not contain the 'openid' scope"| 属性 | 説明 |
|---|---|
| error | エラーコード · invalid_token: Access Token が誤っている · insufficient_scope: Access Token が、API の呼び出しに必要な Scope を持っていない |
| error_description | エラーに関する詳細説明 |