概要
Webアプリケーションの認証に、SNS連携をSDKを使用せずRest API(若しくはサードパーティライブラリ)で行いたいときに参考になるサイトのまとめです。
Facebook
Official
Endpoint
ログインダイアログ
EndPoint
https://www.facebook.com/v2.8/dialog/oauth
Parameter
Parameter |
Value |
client_id |
アプリのID |
redirect_uri |
ログイン後にリダイレクトするURL |
state |
CSRF対策のアプリが作成する任意で固有の文字列 (option) |
response_type |
URLパラメータとフラグメントのどちらに応答データを含むか (option) |
scope |
カンマで区切ったアクセス許可のリスト (option) |
response_type
- code : デフォルト。応答データはURLパラメータとして返されcodeパラメータが含まれます。
- token : 応答データはURLフラグメントとして返され、アクセストークンが含まれます。
Response fields
response_typeの指定内容でフィールドが変わる。
Field |
Description |
code |
response_typeにcodeを指定した場合に受け取るフィールド |
token |
response_typeにtokenを指定した場合に受け取るフィールド |
アクセストークンのコードの交換
response_typeにcode
を指定した場合、レスポンスで受け取る認証コードを使ってアクセストークンを取得する。
[アクセストークン] (https://developers.facebook.com/docs/facebook-login/access-tokens)
EndPoint(GET)
https://graph.facebook.com/v2.8/oauth/access_token
Parameter
Parameter |
Value |
client_id |
アプリのID |
redirect_uri |
ログインダイアログで指定したリダイレクトURL |
client_secret |
固有のapp secret |
code |
ログインダイアログのリダイレクトによって受け取る認証コード |
Response fields
Field |
Description |
access_token |
アクセストークン |
token_type |
Fixed bearer ? |
expires_in |
アクセストークンの有効時間(秒) |
token_typeについて言及しているドキュメントが見当たらなかった。
[The OAuth 2.0 Authorization Framework: Bearer Token Usage] (https://tools.ietf.org/html/rfc6750)
アクセストークンの検証
response_typeにtoken
を指定した場合、レスポンスで受け取るトークンを検証する。
[Graph API Reference - Debug-Token] (https://developers.facebook.com/docs/graph-api/reference/v2.8/debug_token)
EndPoint(GET)
https://graph.facebook.com/debug_token
Parameter
Parameter |
Value |
input_token |
検査対象のトークン |
access_token |
アプリのアクセストークン |
Response fields
JSONフォーマット
Field |
Description |
app_id |
アプリのID |
application |
アプリ名 |
expires_at |
アクセストークンの有効期限が切れる日付 |
is_valid |
アクセストークンが有効かどうか |
issued_at |
アクセストークンが発行された日付 |
metadata |
アクセストークンのメタデータ |
scopes |
権限のリスト |
user_id |
ユーザーID |
参考
Twitter
Official
Endpoint
リクエストトークンの取得
EndPoint(POST)
https://api.twitter.com/oauth/request_token
Parameter
Parameter |
Value |
oauth_callback |
リダイレクトURL |
oauth_consumer_key |
アプリのAPI Key |
oauth_nonce |
リクエストごとにランダムな任意の文字列 |
oauth_signature_method |
Fixed HMAC-SHA1
|
oauth_signature |
oauth_signature_methodで指定した方式で生成した署名 |
oauth_timestamp |
リクエスト作成時のタイムスタンプ値 |
oauth_version |
Fixed 1.0
|
Response fields
Field |
Description |
oauth_token |
リクエストトークン |
oauth_token_secret |
リクエストトークン・シークレット |
oauth_callback_confirmed |
|
ログインダイアログへリダイレクトする
EndPoint(GET)
https://api.twitter.com/oauth/authenticate?oauth_token={oauth_token}
Parameter
Parameter |
Value |
oauth_token |
リクエストトークン |
force_login |
(optional) |
screen_name |
(optional) |
リダイレクト先URL
Twitterのログイン画面でアプリを認証した場合に、リクエストトークンの取得時に指定したリダイレクト先URLにoauth_token、oauth_verifierパラメータが付加されてリダイレクトされる。
Field |
Description |
oauth_token |
認証済みのリクエストトークン |
oauth_verifier |
リクエストトークンの確認用コード |
リクエストトークンをアクセストークンに変換する
EndPoint(POST)
https://api.twitter.com/oauth/access_token
Parameter
Parameter |
Value |
oauth_token |
認証済みのリクエストトークン |
oauth_verifier |
リクエストトークンの確認用コード (optional) |
oauth_consumer_key |
アプリのAPI Key |
oauth_nonce |
リクエストごとにランダムな任意の文字列 |
oauth_signature_method |
Fixed HMAC-SHA1
|
oauth_signature |
oauth_signature_methodで指定した方式で生成した署名 |
oauth_timestamp |
リクエスト作成時のタイムスタンプ値 |
oauth_version |
Fixed 1.0
|
Response fields
Field |
Description |
oauth_token |
アクセストークン |
oauth_token_secret |
アクセストークン・シークレット |
user_id |
ユーザーID |
screen_name |
ユーザー名 |
参考
Google
Official
Endpoint
Redirecting to Google's OAuth 2.0 server
EndPoint(GET)
https://accounts.google.com/o/oauth2/v2/auth
Parameter
Parameter |
Value |
response_type |
Fixed code
|
client_id |
Client ID |
redirect_uri |
ログイン後にリダイレクトするURL |
scope |
スペースで区切ったアクセス許可のリスト |
state |
CSRF対策の任意の文字列 |
access_type |
online or offline
|
prompt |
|
login_hint |
|
include_granted_scopes |
|
Response fields
Field |
Description |
code |
認証コード |
Handling the OAuth 2.0 server response
EndPoint(POST)
https://www.googleapis.com/oauth2/v4/token
Parameter
Parameter |
Value |
code |
ログイン後のリダイレクトによって受け取る認証コード |
client_id |
Client ID |
client_secret |
Client Secret |
redirect_uri |
ログイン後にリダイレクトするURL |
grant_type |
Fixed authorization_code
|
Response fields
Field |
Description |
access_token |
アクセストークン |
refresh_token |
リフレッシュトークン |
expires_in |
アクセストークンの有効時間 |
token_type |
Fixed Bearer
|
Using a refresh token
ログインのフローからは外れますが、アクセストークンの有効期限が失効した場合、リフレッシュトークンを使って、アクセストークンを再発行することができます。
EndPoint(POST)
https://www.googleapis.com/oauth2/v4/token
Parameter
Parameter |
Value |
refresh_token |
リフレッシュトークン |
client_id |
Client ID |
client_secret |
Client Secret |
grant_type |
Fixed refresh_token
|
Response fields
Field |
Description |
access_token |
アクセストークン |
expires_in |
アクセストークンの有効時間 |
token_type |
Fixed Bearer
|
参考
LINE
Official
Endpoint
認証コードの取得
EndPoint
https://access.line.me/dialog/oauth/weblogin
Parameter
Parameter |
Value |
response_type |
Fixed code
|
client_id |
Channel ID |
redirect_uri |
ログイン後にリダイレクトするURL |
state |
CSRF対策の任意の文字列 (optional) |
Response fields
Field |
Description |
code |
ログイン後のリダイレクトによって受け取る認証コード。発行されてから10分間有効 |
state |
認証コード取得時に指定した任意の文字列 |
アクセストークンの取得
EndPoint(POST)
https://api.line.me/v1/oauth/accessToken
Parameter
Parameter |
Value |
grant_type |
Fixed authorization_code
|
client_id |
Channel ID |
client_secret |
Channel Secret |
code |
ログイン後のリダイレクトによって受け取る認証コード |
redirect_uri |
ログイン後にリダイレクトするURL |
Response fields
Field |
Description |
mid |
ユーザーID |
access_token |
アクセストークン |
expires_in |
アクセストークンの有効期限 |
refresh_token |
リフレッシュトークン |
scope |
Fixed null |
アクセストークンの再発行
ログインフローからは外れますが、リフレッシュトークンを使用してアクセストークンを再発行することができます。
EndPoint(POST)
https://api.line.me/v1/oauth/accessToken
Parameter
Parameter |
Value |
refreshToken |
リフレッシュトークン |
Response fields
JSONフォーマット
Field |
Description |
mid |
ユーザーID |
accessToken |
アクセストークン |
expire |
アクセストークンの有効期限 |
refreshToken |
リフレッシュトークン |
参考
OAuth
OAuth 1.0
参考
OAuth 2.0
参考
Java Library
関連記事