我有一个使用ADAL-JS (和 adal-angular) 的 AngularJS SPA Web 应用程序,它设置了身份验证以针对我们在 MS Azure 中的公司 AD 进行身份验证。登录流程似乎工作正常,并且 SPA 接收到一个 id_token。
接下来,当用户单击按钮时,SPA 将向我在 AWS API Gateway 上托管的 REST API 发出请求。我在 Authorization: Bearer <id_token>
标头中传递 id_token。API Gateway 按预期接收到头信息,现在必须确定给定的令牌是否有效,以允许或拒绝访问。
我有一个示例标记,在https://jwt.io/上正确解析,但是我迄今为止未能找到应该用于验证签名的公钥或证书。我查看了以下内容:
- https://login.microsoftonline.com/{tenantid}/federationmetadata/2007-06/federationmetadata.xml
- https://login.microsoftonline.com/{tenantId}/discovery/keys
- 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
我认为应该使用与JWT id_token中的kid和x5t属性匹配的https://login.microsoftonline.com/common/discovery/keys键的x5c属性值(当前为a3QN0BZS7s4nN-BdrjbF0Y_LdMM
,对应的x5c值以“MIIDBTCCAe2gAwIBAgIQY…”开头)。但是,https://jwt.io/网页显示“无效签名”(我还尝试用“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”包裹密钥值)。
此外,是否有(可能是Python的)库能够方便地验证上述id_token(这样我就不必自己获取签名密钥了)?最好能找到的(Python的ADAL)似乎并未提供此功能?