【发布时间】:2017-01-22 00:50:57
【问题描述】:
考虑在我的 Web API 2 中使用 Owin 中间件的代码:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
ConfigureAuthentication(app);
app.UseCors(CorsOptions.AllowAll);
WebApiConfig.Register(config);
app.UseWebApi(config);
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}
private static void ConfigureAuthentication(IAppBuilder app)
{
var issuer = "<<MyIssuer>>";
var audience = "<<MyAudience>>";
const string publicKeyBase64 = "<<MyPublicKeyBase64>>";
var certificate = new X509Certificate2(Convert.FromBase64String(publicKeyBase64));
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new X509CertificateSecurityTokenProvider(issuer, certificate),
}
}
);
}
}
我可以从我的 IDP 中获取 Bearer 令牌并在 jwt.io 中对其进行测试,结果如下:
Issuer 匹配从代码到已验证令牌。
ClientId 匹配从代码到已验证令牌 (sub)。
Audience 匹配从代码到已验证令牌。
出于某种原因 - 然而,令牌在每个请求上都被拒绝(401 Unauthorized),我只是无法理解为什么。我的请求包括Authorization 标头,它具有相同的承载令牌,我可以使用jwt.io (Bearer ey..) 进行验证。如果有什么不同,我会使用Auth0。我还可以提一下,我已尝试下载公共证书并使用该文件,而不是仅使用具有相同结果的公钥字符串。
【问题讨论】:
-
您的凭据在您的图像中并未完全混淆;有可能读取密钥,有人这么倾向于。如果这些代币仍在流通,我建议您撤销它们。
-
这其实只是一个样例项目,key早就过期了,不过还是谢谢大家的关心;)
标签: c# asp.net-web-api rsa owin jwt