我有一个使用ADAL-JS(和adal-angular)的angularjs SPA web应用程序。 它设置为对我们在MS Azure中的公司AD进行身份验证。登录流程似乎正常工作,SPA收到一个id_token。如何验证MS Azure AD生成的JWT id_token?
接下来,当用户单击按钮时,SPA向我在AWS API网关上托管的REST API发出请求。我在Authorization: Bearer <id_token>
标题上传递了id_token。 API网关按预期接收头,现在必须确定给定令牌是否良好,以允许或拒绝访问。
我有一个示例令牌,它在https://jwt.io/上正确解析,但我至今未能找到公钥或证书来验证签名。我已经看了看:
- https://login.microsoftonline.com/ {} tenantid /federationmetadata/2007-06/federationmetadata.xml
- https://login.microsoftonline.com/ {} tenantId /发现/键
- https://login.microsoftonline.com/common/.well-known/openid-configuration(获取jwks_uri)
- https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
- https://login.microsoftonline.com/common/discovery/keys
- https://login.microsoftonline.com/common/discovery/v2.0/keys
我认为我应该使用的关键x5c属性的值在https://login.microsoftonline.com/common/discovery/keys匹配来自JWT id_token孩子和x5t性能(目前a3QN0BZS7s4nN-BdrjbF0Y_LdMM
,导致开始与x5c值“MIIDBTCCAe2gAwIBAgIQY ......”) 。但是,https://jwt.io/页面报告“无效签名”(我也尝试用“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”包装密钥值)。
另外,是否有一个(可能是python)库,可以方便地验证给定的id_token,如上例(这样我就不必自己动手抓住签名密钥?).. 。我能找到的最好的(ADAL for python)似乎没有提供此功能?
你见过[this](https://github.com/Azure/msrestazure-for-python/blob/master/msrestazure/azure_active_directory.py#L166) – 4c74356b41
嘿@ 4c74356b41 - 感谢您的链接!可以很方便但是..我没有看到在那个库中签入令牌签名的位置? – FOR