jwtBearer承载令牌,带有对ASP.Net 5的rc-1更新

本文关键字:Net ASP 更新 rc-1 令牌 jwtBearer | 更新日期: 2023-09-27 18:27:25

我很难让我的asp.net 5 web应用程序能够接受JWT tokens。我已经使用mvc5完全实现了代码的功能,我只想得到一些帮助,将这些代码转换为相同的代码,但可以使用mvc6。它的设置方式是,我的客户端(网站)是一个受信任的应用程序,并使用IssuerSigningToken来验证受信任应用程序的状态,然后我可以通过JWT tokens,从身份验证服务器获取用户和声明的详细信息。

旧代码:

public void Configuration(IAppBuilder app)
{
    HttpConfiguration httpConfig = new HttpConfiguration();
    app.UseJwtBearerAuthentication(new MyJwtOptions());
    app.UseWebApi(httpConfig);
    ConfigureWebApi(httpConfig);
    app.UseWebApi(httpConfig);
}
public class MyJwtOptions : JwtBearerAuthenticationOptions
{
    public MyJwtOptions()
    {
        var issuer = "https://tv.domain.com/trust/domain";
        var audience = "https://www.domain.com/";
        var key = Convert.FromBase64String("dW8E7DDKW34DDW33jg=");
        AllowedAudiences = new[] {audience};
        IssuerSecurityTokenProviders = new[] {new SymmetricKeyIssuerSecurityTokenProvider(issuer, key)};
    }
}

我能找到的最好的例子是这里-JwtBearerSample

        app.UseJwtBearerAuthentication(options =>
        {
            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
            // You also need to update /wwwroot/app/scripts/app.js
            options.Authority = Configuration["jwt:authority"];
            options.Audience = Configuration["jwt:audience"];
        });

我不知道我是否接近,我的主要问题是如何添加IssuerSignerToken?我正在使用Thinktecture,而且他们似乎还没有任何新的最新示例。有人完成了我要做的事吗?我知道还有其他几个类似的问题,但对这些问题的回答使用了X.509 Certificates,如果可能的话,我更喜欢对IssuerSignerToken 使用相同的字符串密钥

更新

我的问题是我过去使用的选项继承自新代码所期望的Microsoft.Owin.Security.JwtBearerAuthenticationOptionsMicrosoft.AspNet.Authentication.JwtBearer.JwtBearerOptions

jwtBearer承载令牌,带有对ASP.Net 5的rc-1更新

要使用对称密钥,您需要迁移到RC2夜间构建(它不能与RC1一起本地工作)。

以下是您如何指定验证JWT令牌所需的颁发者密钥(不需要为此划分JwtBearerOptionsJwtBearerAuthenticationOptions的子类):

var key = Convert.FromBase64String("dW8E7DDKW34DDW33jg=");
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);
});

Pinpoint的答案是完全正确的,尽管我认为我可以补充这一点,并在实现这一点的同时避免数小时的令人沮丧的问题。

不要将任何内容设置为属性Authority

// even if everything else is properly set you will get 500
// some demos tell you to put CLientId here , that is wrong
options.Authority = "";

您不能直接设置配置,您必须创建一个新的configurations对象,如下所示:

 options.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration()
 {
     Issuer = "https://tv.domain.com/trust/domain"
 };

在MVC5中,您可以在控制器中使用System.Security.Claims来获得当前用户,如:

var user = ClaimsPrincipal.Current;

它将不再工作,现在你将在控制器中添加这个:

var user = User.Identity;

您可以这样使用它:

 app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = clientIds,
                IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[]
                {
                    new SymmetricKeyIssuerSecurityKeyProvider(issuer, key)
                }
            });