Skip to content

Instantly share code, notes, and snippets.

@ritou
Last active August 19, 2020 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ritou/633f629d142777309397 to your computer and use it in GitHub Desktop.
Save ritou/633f629d142777309397 to your computer and use it in GitHub Desktop.

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が欲しい

既存の仕様は?

ということで新しいのを検討。
とりあえず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)

エラーとかは後から考える。

シーケンス

assertion_type=access_token

assertion_type=access_token

assertion_type=code

assertion_type=code

assertion_type=id_token

assertion_type=id_token

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment