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.JwtBearerAuthenticationOptions
Microsoft.AspNet.Authentication.JwtBearer.JwtBearerOptions
要使用对称密钥,您需要迁移到RC2夜间构建(它不能与RC1一起本地工作)。
以下是您如何指定验证JWT令牌所需的颁发者密钥(不需要为此划分JwtBearerOptions
或JwtBearerAuthenticationOptions
的子类):
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)
}
});