【发布时间】:2020-06-21 04:30:20
【问题描述】:
背景:我正在使用 Auth0 对我的端点进行授权的 .NET Core Web API 中运行集成测试。当我将 Auth0 返回的令牌粘贴到 JWT.io 验证程序中时,它们包含“无效签名”。
在我的授权流程中,我无法理解我的令牌是在什么时候被签名的、谁签名的以及它是如何签名的。
我在 Auth0(“我的开发 API”)中启动了一个新的开发 API,它使用 HS256 签名算法来签署我的令牌。据我了解,对于 HS256,有一个密钥用于签名令牌(签名密钥),机器到机器的流程如下所示:
我将一些凭据发布到 Auth0,如下所示:
clientID: exampleID
clientSecret: exampleSecret
audience: https://myaudience.com
grant_type: client_credentials
Auth0 将访问令牌发回给我:
access_token: exampleToken1234
当我将此令牌粘贴到 JWT.io 时,我被告知该令牌的签名无效。
在我的 .NET 应用程序中,我进行了一些设置并进行了某种配置:
static void AddAuthentication(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = auth0Config.Domain,
ValidAudience = auth0Config.Audience,
IssuerSigningKey = new
SymmetricSecurityKey(Encoding.UTF8.GetBytes(auth0Config.SigningSecret))
};
});
}
谁能解释我是否应该添加代码来签署这个令牌,如果它已经签署(如果是这样,为什么 JWT.io 告诉我有一个无效的签名)以及上面的配置实际上在做什么?
另外,是否有必要创建一个独立的开发 API 或者我可以向预构建的管理 API 发送授权请求?
提前致谢!
【问题讨论】:
-
jwt.io 无法验证签名,除非您将用于签署令牌的秘密粘贴到“验证签名”下右列的字段中。所以先把秘密粘贴在那里,然后将令牌粘贴到左列。
标签: asp.net-core oauth jwt authorization auth0