我很难让Auth0以JWT格式返回访问令牌。我需要它们以JWT格式,以便我可以使用Java JWT库验证它们。
我正在使用Auth0 lock
登录,并使用/oauth/token
来获取访问令牌 - 我尝试将受众设置为我们的API标识符(在多个位置,包括锁定auth参数,以及/oauth/token
有效负载),但没有成功 - 返回访问令牌,但不返回JWT。
或者,是否有用于验证“本机”Auth0访问令牌的Java库?
var options = {
auth: {
redirectUrl: '<redirect_link>',
responseType: 'code',
params: {
audience: '<API_identifier>',
scope: 'openid offline_access'
}
},
allowedConnections: ['Username-Password-Authentication']
};
var lock = new Auth0Lock('<clientId>', '<auth0_Host>', options);
lock.show();
返回的代码用于向https://<host>/oauth/token
发送数据:
client_id=<client_id>&redirect_uri=<redirect_url>&client_secret=<client_secret>&code=<returned_code>&grant_type=authorization_code&audience=<API_identifier>
哪个成功但访问令牌不是JWT,例如:"access_token":"sG99DAJI789SYgTj"
使用范围openid以JWT格式返回id_token,但是从阅读文档时,此标记不应用于API授权。
答案 0 :(得分:4)
似乎Auth0正在使用OpenID connect,这是OAuth2的扩展。成功进行最终用户身份验证后,服务器将返回JWT格式的ID令牌和访问令牌
ID令牌
ID令牌是一种安全令牌,其中包含有关授权服务器在使用客户端时对最终用户进行身份验证的声明,以及可能还有其他请求的声明。 ID令牌表示为JSON Web令牌(JWT)[JWT]。
您可以使用任何JWT库验证客户端的ID令牌,但访问令牌的验证规则是不同的
<强> 3.2.2.9。访问令牌验证
要使用ID令牌验证从授权端点发出的访问令牌,客户端应该执行以下操作:
使用JWA中指定的哈希算法对access_token的ASCII表示的八位字节进行哈希处理,以获取ID令牌的JOSE头的alg头参数。例如,如果alg是RS256,则使用的哈希算法是SHA-256。
取最左边的一半哈希和base64url对其进行编码。
- 醇>
ID令牌中
at_hash
的值必须与上一步中生成的值匹配。
因此,基本上要验证它,您需要使用ID令牌的哈希算法计算access_token
的摘要,并检查它是否与ID令牌的at_hash
声明匹配