OAuth 2.0のプロトコルでソーシャルログイン的なことを実現するための独自Profile案
何の話か
- モバイルアプリのバックエンドサーバーがOAuth 2.0のEndpointを持ってて、Access Tokenを発行してアプリのセッション代わりに使う
- バックエンドサーバーがOAuth Server、モバイルアプリがOAuth Client
- モバイルアプリがソーシャルログインやりたい
- SNSからすると(モバイルアプリ + バックエンドサーバー)全体がOAuth Client
- SNSから受け取るものは、AuthZ CodeとかAccess TokenとかID Tokenとかけっこうバラバラ
- バックエンドサーバーとしてはそれらを受けとって、Access Tokenを返す、汎用的なToken Endpointのgrant_typeが欲しい
既存の仕様は?
- Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants : フレームワーク...
- SAML 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants しかし、SAMLじゃないときは...
- JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants しかし、JWTじゃないときは...
ということで新しいのを検討。
とりあえずAccess Token Requestだけ定義する。
Access Token Request
※grant_typeなどの文字列は適当に考えた。
- grant_type(REQUIRED) : "urn:ietf:params:oauth:grant-type:federated-assertion"
- assertion(REQUIRED) : 外部サービスのID Token, Authorization Code, Access Tokenなどの値
- assertion_type(OPTIONAL) : assertionの内容を区別するためのパラメータ。デフォルトは"access_token"?
- "code" : assertionにAuthorization Codeを指定
- "id_token" : assertionにID Tokenを指定
- ”access_token" : assertionにAccess Tokenを指定
- assertion_iss(OPTIONAL) : assertionの発行元を指定するためのパラメータ。
- SNSの識別子。Googleの場合、"accounts.google.com"とか
- assertion_aud(OPTIONAL) : assertionの発行先を指定するためのパラメータ。
- SNSが払い出したlient_idとか
- scope(OPTIONAL)
エラーとかは後から考える。