User Account認証 (OAuth)
User Account認証とは、LINE WORKSユーザーでログインを行い、Access Tokenを発行してAPIを利用する方法です。
Developers Consoleに登録したアプリでUser Account認証 (OAuth)を使用したAccess Token発行フローは以下の通りです。
- ユーザーは、アプリの利用を開始する
- アプリは、LINE WORKSにユーザー認可を要求する(Client ID, Redirect URLを送信)
- LINE WORKSは、ユーザーの資格情報(Credentials)を確認し、認証していない場合はログイン画面を表示する
- ユーザーは、ログイン画面でIDとパスワードを入力してログインする
- LINE WORKSは、認証成功時にAuthorization Code(認可コード)を発行し、指定されたRedirect URLにリダイレクトする
- アプリは、Authorization CodeをもとにAccess Tokenを発行する
- アプリは、Access Tokenの有効期限が過ぎた場合、Refresh Tokenをもとに再発行する
Authorization Code / Access Token / Refresh Token の制限について
Authorization Code
- 使用可能回数:1回
- 有効期限:10分
Access Token
- 有効期限: 24時間
Refresh Token
- 有効期限: 90日
事前準備
Developers Consoleにアプリを登録し、以下のアプリ情報を準備します。
- Client ID
- Client Secret
- Redirect URL
Authorization Codeの発行
準備したアプリ情報をもとに、Authorization Codeの発行が可能です。
Request URL
GET https://auth.worksmobile.com/oauth2/v2.0/authorize?client_id={Client_ID}&redirect_uri={Redirect_URL}&scope={Scope}&response_type=code&state={Free_Text}
Request Query Parameters
以下の項目をURLエンコードして送信します。
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
client_id | String | Y | アプリのClient ID |
redirect_uri | String | Y | アプリのRedirect URL。Authorization Code発行後のリダイレクト先。 |
scope | String | Y | 利用する scope 。複数の scope を設定する場合は半角スペース" "で区切る |
response_type | String | Y | code (固定) |
state | String | Y | CSRFを防止するために用いる任意の値 |
domain | String | N | ドメイン名。(スタンダードプランの場合は、グループ名) SSO機能を利用する場合は必須。 |
Request Example
GET https://auth.worksmobile.com/oauth2/v2.0/authorize?client_id=ZbsOq6zjt0IhtZZnrc&redirect_uri=https%3A%2F%2Fexample.com%2Fredirect-url&scope=bot&response_type=code&state=aBcDeF
ログイン画面で認証に失敗した場合、エラー画面が表示されます。
ログイン画面で認証に成功した場合、Redirect URL(redirect_uri)にリダイレクトされます。
Redirect URL
GET {Redirect_URL}?code={Authorization_Code}&state={Free_Text}
Redirect Query Parameters
パラメータ | タイプ | 説明 |
---|---|---|
code | String | Authorization Code (使用可能回数:1回 / 有効期限:10分) |
state | String | Authorization Codeの要求時に送信したstate値 |
Redirect Example
GET https://example.com/redirect-url?code=GgWvoasicmC8MMaUzuxx&state=aBcDeF
Access Tokenの発行
発行されたAuthorization CodeでAccess Tokenを発行することが可能です。
Request URL
POST https://auth.worksmobile.com/oauth2/v2.0/token
Request Headers
Content-Type: application/x-www-form-urlencoded
Request Form Parameters
以下の項目を URL エンコードして渡します。
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
code | String | Y | Authorization Code |
grant_type | String | Y | authorization_code (固定) |
client_id | String | Y | アプリのClient ID |
client_secret | String | Y | アプリのClient Secret |
domain | String | N | ドメイン名。(スタンダードプランの場合は、グループ名) SSO機能を利用する場合は必須。 |
Request Example
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'
Response Body (JSON)
パラメータ | タイプ | 説明 |
---|---|---|
access_token | String | Access Token (有効期間:24時間) |
refresh_token | String | Refresh Token (有効期間:90日) |
scope | String | Access Token で利用できる scope |
expires_in | String | Access Tokenの有効期間 |
token_type | String | Bearer (固定) |
Response Example
{
"access_token": "jp1AAAAwQSFbOgcXEy7kRGlljKS5/8UwpRh454bljHQajmS7TK069czqA0JcuCcbfDNWRqouQVL/cw64btBW08PQALp10jr3cqgQrA9sdytxKo0+xVT90b3yHs+/6/PM//qEjubrjyYMO+Nt3lPZrFOzzJiRiAQqU0lor0zWk+ZNxMm6D40nB8jD74voYpLTKX+HjSh63Xihmq1ckyN72OjkmmRuZ5+9Qp5GPvWp8jnL8n2ewFI/3D8hg9KFicOUh5V6aKqaxDj+zYuA9xAPOTgJMRpNZA=",
"refresh_token": "AAAAUrG721oexirJYyMXOdFMhVpRIDLP9g8gIIGf5xklkE+5FTIITjwlUGCyfJ5F3u4fWi4bIBheJ/2xrQ40M9VTd//g4aEqH1vBwjS6kKpGnUUen2oJqyNcel2fOz8E3nFKAQ==",
"scope": "bot",
"expires_in": "86400",
"token_type": "Bearer"
}
Access Tokenの再発行
Access Tokenの有効期限が満了した場合、Refresh Tokenを使用してAccess Tokenを再発行することが可能です。
Request URL
POST https://auth.worksmobile.com/oauth2/v2.0/token
Request Headers
Content-Type: application/x-www-form-urlencoded
Request Form Parameters
以下の項目をURLエンコードして渡します。
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
refresh_token | String | Y | Refresh Token |
grant_type | String | Y | refresh_token (固定) |
client_id | String | Y | アプリのClient ID |
client_secret | String | Y | アプリのClient Secret |
Request Example
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'
Response Body (JSON)
パラメータ | タイプ | 説明 |
---|---|---|
access_token | String | Access Token |
scope | String | Access Token で利用できる scope |
expires_in | String | Access Tokenの有効期間 |
token_type | String | Bearer (固定) |
Response Example
{
"access_token": "jp1BBBBwQSFbOgcXEy7kRGlljKS5/8UwpRh454bljHQajmS7TK069czqA0JcuCcbfDNWRqouQVL/cw64btBW08PQALp10jr3cqgQrA9sdytxKo0+xVT90b3yHs+/6/PM//qEjubrjyYMO+Nt3lPZrFOzzJiRiAQqU0lor0zWk+ZNxMm6D40nB8jD74voYpLTKX+HjSh63Xihmq1ckyN72OjkmmRuZ5+9Qp5GPvWp8jnL8n2ewFI/3D8hg9KFicOUh5V6aKqaxDj+zYuA9xAPOTgJMRpNZA=",
"scope": "bot",
"expires_in": "86400",
"token_type": "Bearer"
}
Token Revoke
Access Token または Refresh Token を無効化する。
Request URL
https://auth.worksmobile.com/oauth2/v2.0/revoke
HTTP Method
POST
Request Header
Content-Type: application/x-www-form-urlencoded
Request Parameters
name | type | requirement | description |
---|---|---|---|
client_id | String | Y | アプリの Client ID |
client_secret | String | Y | アプリの Client Secret |
token | String | Y | 無効化する Access Token または Refresh Token。 リクエストが成功すると、関連する Token が無効化される。Refresh Token を指定すると、関連するすべての Access Token も無効化される。 |
Request Example
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' \
Response
HTTP 200 OK