【发布时间】:2017-12-25 18:35:21
【问题描述】:
尝试将我的 Web Api 配置为资源服务器。我的客户端登录到 Auth0 并获取 Bearer 令牌,因此授权服务器是 Auth0 而不是我的 Api。然后他们将请求与 Bearer 令牌一起发送到我的 Api。在我的 ASP.Net Web Api 中,我在 Startup 类中实现了以下 OWIN 配置,以验证 Auth0 按照指示 here 发出的请求 JWT Bearer 令牌。
状态:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var auth0Options = new Auth0Options()
{
Issuer = $"https://{ConfigurationManager.AppSettings["Auth0ApiInternalDomain"]}/",
Audience = ConfigurationManager.AppSettings["Auth0ApiInternalAudience"],
ClientId = ConfigurationManager.AppSettings["Auth0ApiInternalClientID"]
};
Auth0Config.Configure(app, auth0Options);
// Configure Web API
WebApiConfig.Configure(app);
}
}
和 Auth0Config 类:
public class Auth0Config
{
public static void Configure(IAppBuilder app, Auth0Options options)
{
if (options == null)
throw new ArgumentNullException(nameof(options));
var keyResolver = new OpenIdConnectSigningKeyResolver(options.Issuer);
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudience = options.Audience,
ValidIssuer = options.Issuer,
IssuerSigningKeyResolver = (token, securityToken, identifier, parameters) => keyResolver.GetSigningKey(identifier),
ValidateLifetime = true,
ValidateIssuer = true,
ValidateAudience = true,
LifetimeValidator = (DateTime? notBefore, DateTime? expires, SecurityToken securityToken, TokenValidationParameters validationParameters) =>
{
if (expires.Value < DateTime.UtcNow)
{
return false;
}
return true;
}
}
});
}
}
我将我的 app.config 中的 Audience、Issuer 和 CliedntId 传递给此方法。我的目的是确定从客户端到我的 Api 的 Bearer 令牌是否有效(作为第一步,我需要验证到期日期)。当我为传入请求调试代码时,LifetimeValidator 工作正常,并为过期令牌返回 false。我用 [Authorize] 装饰了我的操作,预计会收到 401 错误,但实际响应是 200,它似乎忽略了 LifetimeValidator 实现。
我的行动:
[Authorize]
public IHttpActionResult Get(string id)
{
var result = _bookingService.GetBooking(id);
if (result == null) return NotFound();
return Ok(result);
}
- 我是否遗漏了一些东西来使它正确?
- 这是验证令牌过期的好方法吗?
- 是否可以仅使用 OWIN 来验证从 Web api 应用程序发出的请求 Bearer 令牌?
【问题讨论】:
标签: authentication asp.net-web-api owin access-token auth0