bjm*_*jmc 14 google-openid oauth-2.0 openid-connect google-oauth2
当使用谷歌的OpenIDConnect认证系统,它可以指定email或profile或两者的scope参数.如果您请求email范围,则"email"和"email_verified"声明将包含在id_token作为成功OAuth2身份验证会话的一部分返回的声明中.
ID令牌的有效负载
ID令牌是包含一组名称/值对的JSON对象.这是一个示例,格式化为可读性:
{"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"jsmith@example.com",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926,
"hd":"example.com"
}
Run Code Online (Sandbox Code Playgroud)
但是,请求profile范围似乎对id_token的内容没有任何影响.为了检索配置文件信息,您必须向不同的端点发出单独的HTTP请求(使用您刚刚收到的access_token进行身份验证)以获取看起来非常相似但具有更多信息的文档:
{
"kind": "plus#personOpenIdConnect",
"gender": string,
"sub": string,
"name": string,
"given_name": string,
"family_name": string,
"profile": string,
"picture": string,
"email": string,
"email_verified": "true",
"locale": string,
"hd": string
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我更愿意获取nameid_token JWT中包含的配置文件信息(只是,实际上),而不是必须单独调用.有没有办法指定其他字段并将它们作为声明包含在id_token中?如果没有,为什么要email特别处理并返回id_token?
Wil*_*iss 11
从今天开始,您将在令牌端点交换代码时获取配置文件信息(即使用"代码流").
使用方法:将profile范围添加到您的请求中,并确保使用符合OpenID Connect标准的端点(https://accounts.google.com/.well-known/openid-configuration中列出的端点).
寻找索赔,如name与picture这些ID令牌响应.和以前一样,如果email范围在您的请求中,则ID令牌将包含与电子邮件相关的声明.
刷新访问令牌时,使用全新访问令牌返回的ID令牌通常也会包含这些附加声明.您可以检查这些字段,如果存在(并且与您存储的内容不同),请更新用户的个人资料.这对于检测名称或电子邮件地址更改很有用.
当response_type=id_token在范围内发出请求和配置文件时scope=openid+profile+email,生成的id令牌应直接包含配置文件声明.
这是根据OpenID Connect规范的第5.4节,其中说"......当没有发出访问令牌时(这是response_type值的情况id_token),结果声明将在ID令牌中返回."
但是,在我使用OAuth 2 Playground进行的一些测试中,即使response_type=id_token没有发出访问令牌,Google似乎也没有将配置文件声明放在id令牌中.我认为这是Google的一个实现缺陷,如果没有他们修复(或添加对"索赔"请求参数的支持),似乎没有办法完成你正在寻找的东西.
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |