- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要验证我正在处理的服务的 azure jwt access_token。我们目前正在向 https://graph.microsoft.com/beta/me 提出请求。如果请求成功,则 token 有效。不幸的是,我们将无法继续这样做。
为此我尝试了多种想法。他们都没有成功。即使 jwt.io 也无法识别该签名,即使 jwt kid
和 kid
来自 jwk_uri 中的可用签名之一。匹配。
基于此博客post我创建了以下解决方案 (also available on github) .
我的实现与博客文章非常相似,但有一些更改:
#!/usr/bin/env python2
import jwt
import requests
import sys
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend
def get_public_key(access_token):
""" Retrieve public key for access token """
token_header = jwt.get_unverified_header(access_token)
res = requests.get('https://login.microsoftonline.com/common/.well-known/openid-configuration')
jwk_uri = res.json()['jwks_uri']
res = requests.get(jwk_uri)
jwk_keys = res.json()
x5c = None
# Iterate JWK keys and extract matching x5c chain
for key in jwk_keys['keys']:
if key['kid'] == token_header['kid']:
x5c = key['x5c']
break
else:
raise Exception('Certificate not found in {}'.format(jwk_uri))
cert = ''.join([
'-----BEGIN CERTIFICATE-----\n',
x5c[0],
'\n-----END CERTIFICATE-----\n',
])
try:
public_key = load_pem_x509_certificate(cert.encode(), default_backend()).public_key()
except Exception as error:
raise Exception('Failed to load public key:', error)
return public_key, key['kid']
def main():
print '\n'
if len(sys.argv) < 2 or '-h' in sys.argv:
print 'Run it again passing acces token:\n\tpython jwt_validation.py <access_token>'
sys.exit(1)
access_token = sys.argv[1]
audience = 'https://graph.microsoft.com'
public_key, kid = get_public_key(access_token)
try:
jwt.decode(
access_token,
public_key,
algorithms='RS256',
audience=audience,
)
except Exception as error:
print 'key {} did not worked, error:'.format(kid), error
sys.exit(1)
print('Key worked!')
if __name__ == '__main__':
main()
此解决方案返回有效 access_token 的无效签名
,并具有以下回溯:
Traceback (most recent call last):
File "jwt_validation/jwt_validation.py", line 63, in <module>
main()
File "jwt_validation/jwt_validation.py", line 57, in main
audience=audience,
File "~/.pyenv/versions/jwt-validation-tool/lib/python2.7/site-packages/jwt/api_jwt.py", line 93, in decode
jwt, key=key, algorithms=algorithms, options=options, **kwargs
File "~/.pyenv/versions/jwt-validation-tool/lib/python2.7/site-packages/jwt/api_jws.py", line 157, in decode
key, algorithms)
File "~/.pyenv/versions/jwt-validation-tool/lib/python2.7/site-packages/jwt/api_jws.py", line 224, in _verify_signature
raise InvalidSignatureError('Signature verification failed')
jwt.exceptions.InvalidSignatureError: Signature verification failed
任何关于我可能出错的想法都会有帮助。
最佳答案
我遇到了类似的问题,经过几天的调查,我发现在我的案例中,我正在请求具有内置范围(openid 和配置文件)的 token ,并且没有任何自定义范围,这会导致发行具有不同受众的 token (MS Graph),因此使用不同的公钥签名的 token (因为我认为发布的 access_token 只是委托(delegate)的 MS Graph 范围的转发)。
我通过在应用注册(公开 API 部分)中添加自定义范围解决了该问题,现在我的 access_token 已向有效受众颁发,并且我可以使用我的应用公钥检查签名。
关于python - 验证 AAD Azure 中的 JWT access_token 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509774/
auth0版本:9.3.3 我正在开发一个使用 Google Identity API 的 Chrome 扩展程序。当我的扩展程序在用户已经获得 Google 授权的情况下加载时,因此通过以下方式再次
我正在尝试确定存储和访问使用 iOS 应用程序的访问 token 的最佳方式。 我正在熟悉核心数据,虽然这已证明对应用程序数据的某些部分有益,但我不确定核心数据是否最适合我需要的 token 。 大多
我正在尝试使用 Facebook 最近发布的新 Graph API,但我似乎无法让它正常工作。 我已经完成了这些步骤,在调用/authorize 之后,我收到了一个 access_token: acc
我刚刚对 Android Firebase 应用程序进行了渗透测试,测试人员在共享首选项中找到了一个文件 com.google.Firebase.auth.api.xml。它包含 access_tok
我正在使用 tymondesigns/jwt-auth在我的 Laravel 应用程序中打包以进行身份验证。我的 AuthController 看起来像这样: middleware('jwt',
如果有人正在寻找如何更改 FOSOAuthServerBundle 的 access_token 生命周期(expires_in),那么这里是如何做到的: fos_oauth_server:
所以,我在设置 IdentityServer4 时遇到了承载身份验证的问题。基本上,我无法调用我的 API 资源并收到 401 错误。当我使用 access_token 添加授权 header 时。我
我在我的应用程序中使用以下代码来检查是否提供了某些 header 。该代码在本地主机中工作正常,但在应用程序部署到服务器时则不然。基本上我想检查请求中是否存在 header 。在服务器上,我不断收到无
我有一个问题,我正在尝试使用从 获取的 token 在页面上发布 https://graph.facebook.com/oauth/access_token? client_id=YOUR_APP_I
一个小问题。目前我正在使用 Spotify Webapi,我想知道是否有一个 Web API 端点来检查 access_token 是否过期?目前我正在使用 GET https://api.spoti
美好的一天。 我正在尝试与 Facebook 集成。所以我需要用户使用 facebook 登录我的网站,然后我需要获取他们的信息,例如好友列表等。 我执行以下操作: @RequestMapping("
我正在为网络应用程序构建 SSO 设置。我可以通过 https://www.googleapis.com/oauth2/v1/userinfo 登录已知用户并创建新的未知用户. 我收到这样的回复: {
我遇到了以下问题: 我正在尝试将 Instagram 应用到我的网站中。但是,我停留在需要获取访问 token 的步骤上。 api 的文档说我需要像这样请求它: curl \-F 'client_id
我正在开发一个移动网络应用程序,它将访问 Google Books API 并允许用户将书籍添加到他们的“收藏夹”书架。这是我第一次使用需要谷歌授权的 API。 我需要发送授权请求来修改私有(priv
我在尝试为用户获取访问 token 时遇到此错误。这与 facebook 应用程序的授权过程有关。产生该异常的代码如下: OAuthClientRequest oAuthRequest = OAuth
我正在使用 Facebook 长期 token (2 个月),但 FB 开始变得不确定,有时会给我这个返回 { "error": { "message": "Cannot acces
在论坛/网络上搜索了几天之后,我仍然无法解决这个问题并使用 SCORE graph api { "error": { "message": "(#15) This method must be
我正在为一个事件建立一个小网站。这个想法是将 Facebook 事件的参加者添加到此网站。问题是主服务需要access_token。我不想让用户登录应用程序,我只想使用应用程序access_token
这是从 facebook-sdk 示例中获取 access_token 的一部分。在我得到代码之后,我完全按照下面的例子来做 if self.request.get("code"):
我正在使用 IdentityServer4,我想将计算字段添加到 access_token/id_token。 此类字段的示例可以是用户的 IP(或 token 绑定(bind)哈希), token
我是一名优秀的程序员,十分优秀!