IDトークンからユーザー情報を取得する方法
IDトークンはJWT(JSON Web Token)です。それをデコードする方法が2つあります。
1.HUAWEI Account Kit serverが提供しているAPI(デバッグ以外は非推奨)
2.JWTDecode.Androidでデコード
HUAWEI Account Kit serverが提供しているAPI
API:https://oauth-login.cloud.huawei.com/oauth2/v3/tokeninfo
メソッド:POST
パラメータ:
パラメータ名 | 値 |
---|---|
id_token | IDトークン |
NonHmsHuaweiIdLogic.kt
private fun decodeIdToken(
context: Context,
idToken: String
) {
val queue = Volley.newRequestQueue(context)
val postRequest: StringRequest = object : StringRequest(
Method.POST,
"https://oauth-login.cloud.huawei.com/oauth2/v3/tokeninfo",
object : Response.Listener<String>{
override fun onResponse(response: String?) {
response?.let {response ->
val jsonObject = JSONObject(response)
// ユーザーID = jsonObject.optString("sub")
// プロフィール画像 = jsonObject.optString("picture")
// ユーザー名 = jsonObject.optString("display_name")
}
}
},
Response.ErrorListener { error -> error?.printStackTrace() }
) {
override fun getBodyContentType(): String {
return "application/x-www-form-urlencoded"
}
override fun getParams(): Map<String, String> {
val params: MutableMap<String, String> = HashMap()
params["id_token"] = idToken
return params
}
}
queue.add(postRequest)
}
レスポンスから、以下の情報が取得できます。
パラメータ名 | JSONフィールド |
---|---|
ユーザーID | sub |
プロフィール画像 | picture |
ユーザー名 | display_name |
JWTDecode.Androidでデコード
JWTDecode.Androidを使う場合、デコード作業は非常に楽です。
JWT(IDトークン)オブジェクトを作ってから、その中の値を参照するだけでよいです。
パラメータ名 | JWTの参照先 |
---|---|
ユーザーID | JWT.subject |
プロフィール画像 | JWT.claims["picture"]?.asString() |
ユーザー名 | JWT.claims["display_name"]?.asString() |
また、セキュリティを高めるため、issuerとaudienceを確認することをお勧めします。
issuerはhttps://accounts.huawei.comであり、
audienceはアプリIDです。
build.gradle
implementation 'com.auth0.android:jwtdecode:2.0.0'
NonHmsHuaweiIdLogic.kt
private fun decodeIdToken(context: Context, idToken: String, useApi: Boolean) {
val jwt = JWT(idToken)
if (!jwt.issuer.equals("https://accounts.huawei.com")) {
throw Exception("Id token issuer is not correct")
} else if (jwt.audience?.contains(AGCUtils.getAppId(context)) != true) {
throw Exception("Id token audience is not correct")
} else {
// ユーザーID = jwt.subject
// プロフィール画像 = jwt.claims["picture"]?.asString()
// ユーザー名 = jwt.claims["display_name"]?.asString()
}
}
シリーズ
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順1-ソリューションの概要
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順2-実装準備
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順3-HMS判定
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順4-HMS端末でログイン
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順5-HMS端末でログアウト
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順6-HMS端末で権限取り消し
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順7-GMS端末でログイン1
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順8-GMS端末でログイン2
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順9-GMS端末でログアウト
- Android端末におけるHUAWEI IDログイン機能の詳細実装手順10-GMS端末で権限取り消し
GitHub
参考
- HMS:https://developer.huawei.com/consumer/jp/
- HMS Account Kitの紹介:https://developer.huawei.com/consumer/jp/doc/overview/HMS
- HMS Account Kitのドキュメント:https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides-V5/introduction-0000001050048870-V5
- Huawei Developers:https://forums.developer.huawei.com/forumPortal/en/home
- Facebook Huawei Developersグループ:https://www.facebook.com/Huaweidevs/