【发布时间】:2017-10-02 05:43:58
【问题描述】:
我已经实现了 JWT 身份验证
我在启动文件中有类似功能
public void ConfigureOAuth(IAppBuilder app)
{
var issuer = "http://jwtauthzsrv.azurewebsites.net";
//var audience = "fd9eeeb25b694ff1bfd2260cf0d665c3";
//var secret = TextEncodings.Base64Url.Decode("ixioSD5UPMMfGFUvxfblU3elZAnUvtoleVI0qu_7SrI");
List<string> secret = new List<string>();
List<string> audience = new List<string>();
secret.Add(Convert.ToBase64String(TextEncodings.Base64Url.Decode("adFu3IhHjNibtVzy7Uon7l9CQE97XQ8YOKnLzLWlb1s")));
//secret.Add(Convert.ToBase64String(TextEncodings.Base64Url.Decode("YqnwwJFI6HTQheAGvHI9ycuhgRmkpJDgOQDkDnahG2I")));
// secretkeys.Add(TextEncodings.Base64Url.Decode("YqnwwJFI6HTQheAGvHI9ycuhgRmkpJDgOQDkDnahG2I").ToString());
audience.Add("746b0e9e0bb44bfda086bc7f03f427c5");
// audience.Add("7ef27cd3397d41e4848c3a85cca9e737");
// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = audience.AsEnumerable(),//new[] { audience },
//AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
//new SymmetricKeyIssuerSecurityTokenProvider(issuer,secret.AsEnumerable())
},
Provider = new OAuthBearerAuthenticationProvider
{
OnValidateIdentity = context =>
{
context.Ticket.Identity.AddClaim(new System.Security.Claims.Claim("newCustomClaim", "newValue"));
return Task.FromResult<object>(null);
}
}
});
}
我假设每当调用具有 authorize 属性的 api 时,它应该调用 ConfigureOAuth 以便它应该从数据库加载所有 cient id 并通过 jwt 验证,但是在调试时我看到启动文件运行只有当我运行应用程序时,
我怎样才能让它在调用任何 api 时调用 ConfigureOAuth 这个函数,以便它也应该加载新的 clientid 并进行验证。
更新
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = select from database),
上述行仅在我发布和部署项目时初始化一次,而不是在进行新的 api 调用时。
如果创建了新用户,则会出现问题,新用户的 id 不会进入允许的受众
谢谢
【问题讨论】:
-
状态如何?我的(更新的)答案对您有帮助吗?
标签: c# asp.net-mvc oauth owin startup