gpt4 book ai didi

asp.net - ASP.NET 5 中使用 OAuthBearerAuthentication 的 JWT 身份验证

转载 作者:行者123 更新时间:2023-12-02 10:18:26 24 4
gpt4 key购买 nike

我正在开发 ASP.NET 5 应用程序,我想使用 JWT 来保护应用程序中的某些端点。目前,我们决定由我们(而不是第三方)发行 JWT,因为我们的所有客户均由应用程序“拥有”,即我们没有“外部”客户。在示例中,我有一个端点,它使用jwt-dotnet创建并返回JWT。库如下(我理解这是一个基本示例,没有过期时间和单个主题声明等):

...
// include a single subject claim (user id)
var claims = new Dictionary<string, object>() { { "sub", "1234" } };
var key = "EXAMPLE_SECRET_KEY_TO_SIGN_JWT";
var token = JWT.JsonWebToken.Encode(claims, key, JWT.JwtHashAlgorithm.HS256);
...
// return JWT

我可以使用与预期相同的 key 对此 JWT 进行编码和解码。在我的 Startup.cs 文件中,我使用 Microsoft.AspNet.Authentication.OAuthBearer 中间件来授权 Controller 中指定了 [Authorize] 属性的相关路由。然而,在查看了包括here在内的许多帖子后和 here我似乎找不到如何以相同方式向 OAuth 中间件提供此签名 key 的示例。我的 Startup.cs 文件中的代码如下所示:

public class Startup
{
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.UseErrorPage();
app.UseOAuthBearerAuthentication();
app.UseMvc();
}

...

public void ConfigureServices(IServiceCollection services)
{
services.Configure<OAuthBearerAuthenticationOptions>(bearer =>
{
bearer.AutomaticAuthentication = true;
bearer.TokenValidationParameters.ValidAudience = "Example audience";
bearer.TokenValidationParameters.ValidIssuer = "Example issuer";
bearer.TokenValidationParameters.ValidateAudience = true;
bearer.TokenValidationParameters.ValidateIssuer = true;
bearer.TokenValidationParameters... // how do I set the signing key as a string literal?
});
services.AddMvc();
}
}

我的假设是我应该能够简单地向中间件提供相同的字符串文字 key ,以便它可以验证 token 签名。然而,情况似乎并非如此,因为示例讨论使用 RSA key 或证书,而不是提供单个 key /字符串文字。

我意识到我可能在这里遗漏了一些东西,或者实际上这可能是错误的方法,我不应该这样做!

最佳答案

编辑:对称 key 现在在 RC2 nightly 版本中原生支持:

var key = Convert.FromBase64String("base64-encoded symmetric key");

app.UseJwtBearerAuthentication(options => {
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;

options.Authority = Configuration["jwt:authority"];
options.Audience = Configuration["jwt:audience"];

options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(key);
});
<小时/>

您不能,至少没有一些管道:OAuth2 承载中间件依赖于 IdentityModel 5,它不支持像您在第一个代码段中使用的对称 key 。

当然,最终将支持对称 key ( https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/250 ),但与此同时,建议使用非对称 key (如 RSA key )。

您还可以自己实现对称 key 支持(请参阅 https://gist.github.com/sandorfr/4039d540b6b552154522 ),但使用 RSA key 绝对是更好的选择。

关于asp.net - ASP.NET 5 中使用 OAuthBearerAuthentication 的 JWT 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com