User Account 認証は、LINE WORKS ユーザーでログインを行い、Access Token を発行して API を利用する方法です。また、ID Token を取得し、認証したメンバー情報を取得することもできます。
User Account 認証は、OAuth 2.0 に準拠した認可フローを提供しています。
また、認証プロトコルとして OpenID Connect (OIDC) に対応しています。
認可・認証フローとして、Authorization Code Flow と Implicit Flow の 2 つの方式に対応しています。
注意
- Implicit Flow は ID Token の取得で利用されるフローです。Access Token の取得で利用することは避けてください。
認証の要求 で response_type に code を指定した場合には、Authorization Code Flow として動作します。
参考
- 通常はこの Authorization Code Flow を利用することを推奨します。
認証の要求 で response_type に id_token または token id_token を指定した場合には、Implicit Flow として動作します。
参考
- 通常は Authorization Code Flow を利用することを推奨します。
発行される各トークンについて、以下に記載します。それぞれ有効期限が設けられています。また、Authorization Code には利用可能回数が設けられています。
| 種類 | 説明 | 有効期限 | 使用可能回数 |
|---|---|---|---|
| Authorization Code | Authorization Code Flow で利用される認証コード | 10 分 | 1 回 |
| Access Token | ユーザー認証情報と、使用する API リクエスト範囲情報 (scope) を含む | 1 時間 または 24 時間 | - |
| Refresh Token | Access Token が満了した際に、一定期間、再び認証手続きを経ずに Access Token を再発行するために利用する | 90 日 | - |
| ID Token | ユーザー認証情報と、付加情報 (email、name、locale 等) を含む | 1 時間 | - |
Developer Console に認証アプリを登録し、以下のアプリ情報を準備します。
準備したアプリ情報をもとに、認証を要求します。
GET https://auth.worksmobile.com/oauth2/v2.0/authorize?client_id={Client_ID}&redirect_uri={Redirect_URL}&scope={Scope}&response_type={code|id_token|token%20id_token}&state={state}&nonce={nonce}GET
以下の項目を URL エンコードして送信します。
| パラメータ | タイプ | 説明 |
|---|---|---|
| client_id | String | アプリの Client ID required |
| redirect_uri | String | アプリの Redirect URL Authorization Code あるいは ID Token 発行後のリダイレクト先 required |
| scope | String | 利用する Scope 複数の Scope を指定する場合には半角スペースで区切ります。 詳しくは OAuth Scopes をご覧ください。 ID Token を発行する場合 ・"openid" を指定します。 ・ID Token に email 情報を含める場合は "email" を、name や locale 情報を含める必要がある場合には "profile" を追加します。 |
| response_type | String | 使用する認証処理フローを決定する OAuth 2.0 Response Type 値 以下のいずれかを指定します。 ・"code" : Authorization Code (Authorization Code Flow) ・"id_token" : ID Token (Implicit Flow) ・"token id_token" : Access Token および ID Token (Implicit flow) |
| state | String | CSRF (Cross-Site Request Forgeries) を防止するために用いる任意の値 推測しにくい値を指定します。 required |
| nonce | String | Replay Attack 防止のための任意の値 ・Implicit Flow の場合には required 推測しにくい値を指定します。 |
| domain | String | ドメイン名 (フリープラン・スタンダードプランの場合は、グループ名) SSO 機能を利用する場合は required |
curl -location -request GET 'https://auth.worksmobile.com/oauth2/v2.0/authorize?client_id=X6xn4Bc9k_t2RstnAwrX&redirect_uri=https://example.com/redirect-url&scope=openid&response_type=code&state=UmyR2sX9gO&nonce=Gwbna3Srbl355n2c'curl -location -request GET 'https://auth.worksmobile.com/oauth2/v2.0/authorize?client_id=X6xn4Bc9k_t2RstnAwrX&redirect_uri=https://example.com/redirect-url&scope=openid&response_type=id_token&state=UmyR2sX9gO&nonce=Gwbna3Srbl355n2c'ログイン画面で認証に成功すると、リクエスト時に指定した Redirect URL (redirect_uri) にリダイレクトされます。ログイン画面で認証に失敗した場合には、エラー画面が表示されます。
レスポンスはリダイレクトされた URL の Query parameter に返されます。
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | String | Authorization Code (認可コード) (使用可能回数:1 回 / 有効期限:10 分) |
| state | String | Authorization Code の要求時に送信した state 値 |
レスポンスはリダイレクトされた URL のフラグメント部に返されます。
| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | Access Token response_type に "token" を含めてリクエストした場合に返されます。 必ず Validation チェック をしてから利用する |
| id_token | String | ID Token 必ず Validation チェック をしてから利用する |
| scope | String | Access Token で利用できる Scope |
| expires_in | String | Access Token の有効期限 有効期限は、Developer Console > API > ClientApp の [トークン設定 > Access Tokenの有効期限] の設定に従う。 ・1 hour (3600 秒) ・24 hours (86400 秒) 設定された有効期限が経過すると、自動的に満了する。 |
| token_type | String | トークンの種類 "Bearer" |
| state | String | 認証の要求時に指定した値 |
GET https://example.com/redirect-url?code=GgWvoas...&state=aBcDeFGET https://example.com/redirect-url#access_token=jp1AAAAwQ...&id_token=eyJ0eXAiOiJKV...&scope=openid&expires_in=86400&token_type=Bearer&state=UmyR2sX9gO※ Authorization Code Flow のみ
発行された Authorization Code を使用してトークンの発行を要求します。
POST https://auth.worksmobile.com/oauth2/v2.0/tokenPOST
Content-Type: application/x-www-form-urlencoded以下の項目を URL エンコードして渡します。
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | String | Authorization Code required |
| grant_type | String | "authorization_code" (固定) required |
| client_id | String | アプリの Client ID required |
| client_secret | String | アプリの Client Secret required |
| redirect_uri | String | アプリの Redirect URL Autiorizaiton Code 発行後のリダイレクト先と同一のもの scope に openid が指定された場合は 必須 |
| domain | String | ドメイン名 (フリープラン・スタンダードプランの場合は、グループ名) SSO 機能を利用する場合には 必須 |
curl --location --request POST 'https://auth.worksmobile.com/oauth2/v2.0/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'code=GgWvoasicmC8MMaUzuxx' \--data-urlencode 'grant_type=authorization_code' \--data-urlencode 'client_id=ZbsOq6zjt0IhtZZnrc' \--data-urlencode 'client_secret=oRm3M_nBg6' \--data-urlencode 'redirect_uri=https://example.com/redirect-url'| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | Access Token (有効期間:1 時間 または 24 時間) |
| refresh_token | String | Refresh Token (有効期間:90 日) |
| id_token | String | ID Token scope に openid が指定された場合のみ発行されます。 ID Tokenについての詳細は ID Token 参照 |
| scope | String | Access Token で利用できる Scope |
| expires_in | String | Access Token の有効期限 有効期限は、Developer Console > API > ClientApp の [トークン設定 > Access Tokenの有効期限] の設定に従う。 ・1 hour (3600 秒) ・24 hours (86400 秒) 設定された有効期限が経過すると、自動的に満了する。 |
| token_type | String | "Bearer" (固定) |
{ "access_token": "jp1AAAAwQ...", "refresh_token": "AAAAUrG72...", "id_token": "eyJ0eXAiOiJKV...", "scope": "bot", "expires_in": "86400", "token_type": "Bearer"}注意
- Access Token と共に、Access Token の有効期限と Refresh Token を保存することを推奨します。
- API を利用する際に Access Token の有効期限を確認し、有効期限が終了している場合には Refresh Token を用いて Access Token を再発行できます。
- ID Token 取得後は、ID Token や Access Token の検証を行ってください。 詳しくは ID Token の検証 を参照してください。
※ Authorization Code Flow のみ
Access Token の有効期限が終了した場合には、Refresh Token を使用して Access Token の再発行を要求できます。
注意
Access Token を Implicit Flow で発行した場合には、Refresh Token は発行されず、Access Token を再発行することはできません。
Developer Console > API > ClientApp の [トークン設定 > Refresh Token Rotation] の設定により、動作が異なります。
Refresh Token Rotation : ON
Refresh Token Rotation : OFF
POST https://auth.worksmobile.com/oauth2/v2.0/tokenContent-Type: application/x-www-form-urlencoded以下の項目を URL エンコードして渡します。
| パラメータ | タイプ | 説明 |
|---|---|---|
| refresh_token | String | Refresh Token required |
| grant_type | String | "refresh_token" (固定) required |
| client_id | String | アプリの Client ID required |
| client_secret | String | アプリの Client Secret required |
curl --location --request POST https://auth.worksmobile.com/oauth2/v2.0/token \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'refresh_token=AAAAUrG721oexirJYyMXOdFMhVpRIDLP9g8gIIGf5xklkE+5FTIITjwlUGCyfJ5F3u4fWi4bIBheJ/2xrQ40M9VTd//g4aEqH1vBwjS6kKpGnUUen2oJqyNcel2fOz8E3nFKAQ==' \--data-urlencode 'grant_type=refresh_token' \--data-urlencode 'client_id=ZbsOq6zjt0IhtZZnrc' \--data-urlencode 'client_secret=oRm3M_nBg6'| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | Access Token |
| scope | String | Access Token で利用できる Scope |
| refresh_token | String | 新しい Refresh Token Refresh Token Rotation が ON の場合にのみ含まれる。 |
| expires_in | String | Access Token の有効期限 有効期限は、トークンを再発行した時点における Developer Console > API > ClientApp の [トークン設定 > Access Tokenの有効期限] の設定に従う。 ・1 hour (3600 秒) ・24 hours (86400 秒) 設定された有効期限が経過すると、自動的に満了する。 |
| token_type | String | "Bearer" (固定) |
{ "access_token": "jp1BBBBwQSFbOgcXEy7kRGlljKS5/8UwpRh454bljHQajmS7TK069czqA0JcuCcbfDNWRqouQVL/cw64btBW08PQALp10jr3cqgQrA9sdytxKo0+xVT90b3yHs+/6/PM//qEjubrjyYMO+Nt3lPZrFOzzJiRiAQqU0lor0zWk+ZNxMm6D40nB8jD74voYpLTKX+HjSh63Xihmq1ckyN72OjkmmRuZ5+9Qp5GPvWp8jnL8n2ewFI/3D8hg9KFicOUh5V6aKqaxDj+zYuA9xAPOTgJMRpNZA=", "scope": "bot", "expires_in": "86400", "token_type": "Bearer"}Access Token または Refresh Token の漏洩が疑われたり、アプリの利用を停止する際に Token が有効な状態のままとなることを避けたい場合などには、Token を無効化できます。
POST https://auth.worksmobile.com/oauth2/v2.0/revokeContent-Type: application/x-www-form-urlencoded| name | type | description |
|---|---|---|
| client_id | String | アプリの Client ID required |
| client_secret | String | アプリの Client Secret required |
| token | String | 無効化する Access Token または Refresh Token リクエストが成功すると、関連する Token が無効化される。 Refresh Token を指定すると、関連するすべての Access Token も無効化される。 required |
| token_type_hint | String | 無効化する token のタイプに関するヒント |
curl --location --request POST 'https://auth.worksmobile.com/oauth2/v2.0/revoke' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=kr1AAAA0pZvx/7yyppqVGFfFf2X6HcfTcuNQ6ad1HEXjs3CBikVHSqqwWW218HCElz5JpN+13gothwKxdF98w6GGSzgWBkmarR96Bz3/oiFexXoVYswTntRLF6CYGLmW4VtZnrgeWRL1XmchdrNopKDc8sdfKL1AHhs+xVUCTW1Cc1ozhSFzXAu2VHLWf4R2osM+j/UoiombXGI3ywYjvfoUqTDdpOf8YRqqkI4BbiWMgJWAJe+i4HXFCOHbOI0zOUSrAfGBPadF+HAEyvUOBudoBQ2g/zalcQRnmKEj3uJWr9vsyHq' \--data-urlencode 'client_id=ZbsOq6zjt0IhtZZnrc' \--data-urlencode 'client_secret= nWgG8mdOiM' \--data-urlencode 'token_type_hint=refresh_token'HTTP 200 OK
LINE WORKS からログアウトする。 OpenID Connect RP-Initiated Logout 1.0 に従います。
補足
- これを LINE WORKS にアクセスしているブラウザ上で開くことで、LINE WORKS からログアウトすることができます。
GET または POST https://auth.worksmobile.com/oauth2/v2.0/logout| パラメータ | タイプ | 説明 |
|---|---|---|
| id_token_hint | string | OpenID Connect (OIDC) ログインで発行された ID Token ログアウト対象の ID Token を指定する Required |
| client_id | string | ログアウトするアプリの client_id Required |
| post_logout_redirect_uri | string | IDP (LINE WORKS) からログアウトした後にリダイレクトする URL URL エンコードした値を指定する Developer Console で OIDC Logout Redirection に登録されている Redirect URL でなければならない Required |
| state | string | CSRF (Cross-Site Request Forgeries) を防止するための任意の値 推測しにくい値を指定する post_logout_redirect_uri にリダイレクトされる際に追加される |
https://auth.worksmobile.com/oauth2/v2.0/logout?id_token_hint=eyJ0e...&client_id=X6xn4...&post_logout_redirect_uri=https%3A%2F%2Fyourdomain.com%2Flogout%2Fcallback&state=UmyR2sX9gOcurl --location 'https://auth.worksmobile.com/oauth2/v2.0/logout' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'id_token_hint=eyJ0e...' \--data-urlencode 'client_id=X6xn4Bc9k_t2RstnAwrX' \--data-urlencode 'post_logout_redirect_uri=https://yourdomain.com/logout/callback' \--data-urlencode 'state=UmyR2sX9gO'ユーザーがログアウトについて同意し、LINE WORKS からのログアウトに成功すると、post_logout_redirect_uri にリダイレクトされます。
| パラメータ | タイプ | 説明 |
|---|---|---|
| state | string | ログアウトのリクエストの際に state に指定した値 |
発行された Access Token は、認証スキーム Bearer と組み合わせて Authorization HTTP Request Header に指定し、API を呼び出します。
注意
- Authorization タイプに Bearer を明示し、Bearer と Token を 1 つの半角スペースでつなぎます。
PostMethod method = new PostMethod(url);method.setRequestHeader("Authorization", "Bearer AAAA5IdUiCj5emZowcf49VRu7qbb548g6aGE");