使用 python authlib 解析 id_token 时出现 UnsupportedAlgorithmError
UnsupportedAlgorithmError when parsing an id_token with python authlib
我有一个 oauth/oidc 服务器和一个客户端,都使用 authlib 0.14.3 和 flask 集成。服务器使用 HS256 对 id_token 进行签名。客户端具有这些端点:
oauth = OAuth()
oauth.init_app(app)
oauth.register(
name='mydomain',
client_id=OAUTH_CLIENT_ID,
client_secret=OAUTH_CLIENT_SECRET,
access_token_url="http://localhost:5000/oauth/token",
authorize_url="http://localhost:5000/oauth/authorize",
client_kwargs={
'scope': 'openid profile'
}
)
@app.route("/login", methods=["GET", "POST"])
@sheraf.connection()
def login():
redirect_uri = url_for('users.account.authorize', _external=True)
return oauth.mydomain.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
token = oauth.mydomain.authorize_access_token()
userinfo = oauth.mydomain.parse_id_token(token)
...
return redirect('/')
parse_id_token
提出 UnsupportedAlgorithmError
。使用调试器我发现 authlib/jose/rfc7515/jws.py:JsonWebSignature._algorithms
只有 RS256
可用。
我是不是漏掉了什么?
我在 oidc 服务器注册中缺少强制参数:
oauth.register(
name='mydomain',
client_id=OAUTH_CLIENT_ID,
client_secret=OAUTH_CLIENT_SECRET,
access_token_url="http://localhost:5000/oauth/token",
authorize_url="http://localhost:5000/oauth/authorize",
id_token_signing_alg_values_supported=["HS256", "RS256"],
jwks={
"keys": [{
"kid": "my-key-id",
"kty": "oct",
"alg": "HS256",
"k": urlsafe_b64encode("secret-key"),
}]
},
client_kwargs={
'scope': 'openid profile'
}
)
我有一个 oauth/oidc 服务器和一个客户端,都使用 authlib 0.14.3 和 flask 集成。服务器使用 HS256 对 id_token 进行签名。客户端具有这些端点:
oauth = OAuth()
oauth.init_app(app)
oauth.register(
name='mydomain',
client_id=OAUTH_CLIENT_ID,
client_secret=OAUTH_CLIENT_SECRET,
access_token_url="http://localhost:5000/oauth/token",
authorize_url="http://localhost:5000/oauth/authorize",
client_kwargs={
'scope': 'openid profile'
}
)
@app.route("/login", methods=["GET", "POST"])
@sheraf.connection()
def login():
redirect_uri = url_for('users.account.authorize', _external=True)
return oauth.mydomain.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
token = oauth.mydomain.authorize_access_token()
userinfo = oauth.mydomain.parse_id_token(token)
...
return redirect('/')
parse_id_token
提出 UnsupportedAlgorithmError
。使用调试器我发现 authlib/jose/rfc7515/jws.py:JsonWebSignature._algorithms
只有 RS256
可用。
我是不是漏掉了什么?
我在 oidc 服务器注册中缺少强制参数:
oauth.register(
name='mydomain',
client_id=OAUTH_CLIENT_ID,
client_secret=OAUTH_CLIENT_SECRET,
access_token_url="http://localhost:5000/oauth/token",
authorize_url="http://localhost:5000/oauth/authorize",
id_token_signing_alg_values_supported=["HS256", "RS256"],
jwks={
"keys": [{
"kid": "my-key-id",
"kty": "oct",
"alg": "HS256",
"k": urlsafe_b64encode("secret-key"),
}]
},
client_kwargs={
'scope': 'openid profile'
}
)