我正在使用Google 的 OpenIDConnect 身份验证,并且我想验证id_token
从 Google 返回的 JWT。iss
但是,关于 Google 为ID 令牌中的(颁发者)声明返回的值,文档似乎不一致。
一个页面显示“ iss: always accounts.google.com”,但另一个页面显示“ID 令牌中 iss 的值等于accounts.google.com
或https://accounts.google.com
”,示例代码中的注释进一步说明:
// If you retrieved the token on Android using the Play Services 8.3 API or newer, set
// the issuer to "https://accounts.google.com". Otherwise, set the issuer to
// "accounts.google.com". If you need to verify tokens from multiple sources, build
// a GoogleIdTokenVerifier for each issuer and try them both.
我有一个服务器端应用程序,而不是 Android 应用程序,所以我没有使用 Play Services。
为了进一步搅浑水,OpenIDConnect 规范本身包含一个注释:
实施者可能想知道,在撰写本文时,Google 部署的 OpenID Connect 实施发布的 ID 令牌省略了 iss(发布者)声明值中所需的 https:// 方案前缀。因此,希望与 Google 合作的依赖方实现将需要有代码来解决这个问题,直到他们的实现被更新。任何此类解决方法代码都应以不会中断的方式编写,谷歌将缺少的前缀添加到其发行者值中。
该文件的日期为 2014 年 11 月 8 日。从那时起,Google 是否已对某个iss
值进行了标准化,还是我真的需要同时检查这两个值?上面的评论似乎表明只有 Play Services >=8.3 可以iss
使用https://
,而其他任何地方的值都是 just accounts.google.com
。真的吗?