Azure AD B2C 使用 PHP 验证 JWT
Posted
技术标签:
【中文标题】Azure AD B2C 使用 PHP 验证 JWT【英文标题】:Azure AD B2C Validate JWT with PHP 【发布时间】:2017-09-25 20:02:34 【问题描述】:警告:我完全是 JWT 新手,并试图弄清楚这一切。
首先...我的理解是:
JWT 包含由.
分隔的三个段。第一部分可以进行 base64 解码以获得“某些东西”,我可以在其中验证第二个(和第三个?)段中的声明。
我能够取回id_token
,并且可以将每个段分成其各自的 JSON 对象...但这根本不安全 :)
我查看了这个https://github.com/firebase/php-jwt,但我不确定我需要提供什么 KEY 来解码 JWT(我知道我可以解码第一段并获得用于 JWT 的 kid
,但是当我拥有它时具体的key
对象...我不确定要传递给firebase 来解码什么?https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in
请原谅我对 JWT 的糟糕理解:/
编辑:更多信息
使用此 ID TOKEN:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IklkVG9rZW5TaWduaW5nS2V5Q29udGFpbmVyIn0.
eyJleHAiOjE0NDIzNjAwMzQsIm5iZiI6MTQ0MjM1NjQzNCwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9s
b2dpbi5taWNyb3NvZnRvbmxpbmUuY29tLzc3NTUyN2ZmLTlhMzctNDMwNy04YjNkLWNjMzExZjU4ZDkyNS92
Mi4wLyIsImFjciI6ImIyY18xX3NpZ25faW5fc3RvY2siLCJzdWIiOiJOb3Qgc3VwcG9ydGVkIGN1cnJlbnRs
eS4gVXNlIG9pZCBjbGFpbS4iLCJhdWQiOiI5MGMwZmU2My1iY2YyLTQ0ZDUtOGZiNy1iOGJiYzBiMjlkYzYi
LCJpYXQiOjE0NDIzNTY0MzQsImF1dGhfdGltZSI6MTQ0MjM1NjQzNCwiaWRwIjoiZmFjZWJvb2suY29tIn0.
h-uiKcrT882pSKUtWCpj-_3b3vPs3bOWsESAhPMrL-iIIacKc6_uZrWxaWvIYkLra5czBcGKWrYwrAC8ZvQe
DJWZ50WXQrZYODEW1OUwzaD_I1f1HE0c2uvaWdGXBpDEVdsD3ExKaFlKGjFR2V7F-fPThkVDdKmkUDQX3bVc
yyj2V2nlCQ9jd7aGnokTPfLfpOjuIrTsAdPcGpe5hfSEuwYDmqOJjGs9Jp1f-eSNEiCDQOaTBSvr479L5ptP
XWeQZyX2SypN05Rjr05bjZh3j70ZUimiocfJzjibeoDCaQTz907yAg91WYuFOrQxb-5BaUoR7K-O7vxr2M-_
CQhoFA
我可以将标题段eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IklkVG9rZW5TaWduaW5nS2V5Q29udGFpbmVyIn0
解码为"typ":"JWT","alg":"RS256","kid":"IdTokenSigningKeyContainer"
然后看https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in
我知道这个关键对象被使用了
"kid":"IdTokenSigningKeyContainer","use":"sig","kty":"RSA","e":"AQAB","n":"tLDZVZ2Eq_DFwNp24yeSq_Ha0MYbYOJs_WXIgVxQGabu5cZ9561OUtYWdB6xXXZLaZxFG02P5U2rC_CT1r0lPfC_KHYrviJ5Y_Ekif7iFV_1omLAiRksQziwA1i-hND32N5kxwEGNmZViVjWMBZ43wbIdWss4IMhrJy1WNQ07Fqp1Ee6o7QM1hTBve7bbkJkUAfjtC7mwIWqZdWoYIWBTZRXvhMgs_Aeb_pnDekosqDoWQ5aMklk3NvaaBBESqlRAJZUUf5WDFoJh7yRELOFF4lWJxtArTEiQPWVTX6PCs0klVPU6SRQqrtc4kKLCp1AC5EJqPYRGiEJpSz2nUhmAQ"
那么...我会将什么值传递给 firebase?
【问题讨论】:
请从这里开始:github.com/Azure-Samples/… 谢谢!我能够从该存储库中解析出一些逻辑/功能,并在我的 Firebase 和 LibSec 实例中使用它,现在有了一个可行的解决方案:) 【参考方案1】:以防万一有人想快速起床和/或像我一样感到困惑;我可以推荐问题评论中指出的链接@astaykov
https://github.com/Azure-Samples/active-directory-b2c-php-webapp-openidconnect
连同我为授权代码授予创建的一个简单类(处理获取 SSO URL、OAuth2 令牌和使用外部库验证 id_token)
https://gist.github.com/rcosgrave/ec92938181096fd8847a38c9cc6a37d0
【讨论】:
请接受您自己的答案,以便其他人从中受益。谢谢以上是关于Azure AD B2C 使用 PHP 验证 JWT的主要内容,如果未能解决你的问题,请参考以下文章
azure 应用服务身份验证模块是不是支持 azure ad b2c?
使用 azure AD B2C 进行 blazor web api 身份验证