はじめに
Auth0で外部のIDプロバイダーを利用してソーシャルログインをすると、利用したIDプロバイダーから取得できた情報でユーザーが作成されます。
この作成されたユーザーには、IDプロバイダーから取得できたアクセストークンもデータの一つとして保存されます。
今回はManagementAPIを使って、ソーシャルログインで作成されたユーザーのデータからIDプロバイダーのアクセストークンを取得してみました。
利用するユーザーデータ
本記事では例として以下のようにソーシャルログインで作成されたユーザーを利用します。
PRIMARY IDENTITY PROVIDER
をみてもらえればわかるように、Goolgeでログインをして作成したユーザーです。
Auth0の管理画面からuser情報のRaw JSON
等をみても特にアクセストークンは表示されません。
ManagementAPIを使ってユーザー情報を取得したときだけアクセストークンを取得できるみたいです。
IDプロバイダーのアクセストークンを取得
以下のAPIを使ってユーザー情報を取得します。
Get a user
https://auth0.com/docs/api/management/v2#!/Users/get_users_by_id
GET https://{Auth0テナントのドメイン}/api/v2/users/{ユーザーID} HTTP/1.1
リクエストが成功するとユーザー情報が取得できます
{
"created_at": "2020-10-31T05:34:57.252Z",
"email": "XXXXXXXX@gmail.com",
"email_verified": true,
"family_name": "XX",
"given_name": "XX",
"identities": [
{
"provider": "google-oauth2",
"access_token": "ya29.A6fHA0S.......................................",
"expires_in": 3599,
"user_id": "..........",
"connection": "google-oauth2",
"isSocial": true
}
],
"locale": "ja",
"name": "XXXX",
"nickname": "XXXXXXXX",
"picture": "https://lh3.googleusercontent.com/a-/.................",
"updated_at": "2020-10-31T05:34:57.252Z",
"user_id": "google-oauth2|..........",
"last_ip": "XXX.XXX.XX.XX",
"last_login": "2020-10-31T05:34:57.250Z",
"logins_count": 1
}
取得できたJSONにidentities
という配列があり、ここにユーザーに紐づくIDプロバイダーの情報が載ってきます。
このIDプロバイダーの情報の中のaccess_token
プロパティを参照すると、そのIDプラバイダーから取得できたアクセストークンを取得できます。
おわりに
ユーザー情報からアクセストークンを取得した後はソーシャルログイン時にユーザーから同意を得たスコープの範囲内で、このアクセストークンを使ってIDプラバイダー側が提供するログインユーザーのリソースにアクセスすることができます。
必要があれば試してみてください。