- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要什么:
代码怎么样:
public void Configuration(IAppBuilder app)
{
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AuthorizeEndpointPath = "/Authorize",
AllowInsecureHttp = true,
Provider = new OAuthAuthorizationServerProvider
{
OnGrantCustomExtension = GrantCustomExtension,
OnValidateClientRedirectUri = ValidateClientRedirectUri,
OnValidateClientAuthentication = ValidateClientAuthentication,
}
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
Provider = new OAuthBearerAuthenticationProvider
{
//Handles applying the authentication challenge to the response message.
ApplyChallenge=MyApplyChallenge,
//Handles processing OAuth bearer token.
RequestToken=MyRequestToken,
//Handles validating the identity produced from an OAuth bearer token.
ValidateIdentity = MyValidateIdentity,
}
});
app.UseWebApi(new WebApplication3.Config.MyWebApiConfiguration());
}
问题是什么:
OAuthBearerAuthenticationProvider
的3个属性,ApplyChallenge
、RequestToken
和 ValidateIdentity
。如何实现这3个方法?
在 token 认证过程中,我想到的是解密访问 token ,验证来自客户端的 token ,如果验证了 token ,则将 token 的身份放入HttpContext.Current .用户
.
OAuthBearerAuthenticationProvider
的职责是履行之前的步骤。我说得对吗?
最佳答案
如您所知,UseOAuthAuthorizationServer
负责对用户进行身份验证。然后,UseOAuthBearerAuthentication
的任务是确保只有经过身份验证的用户才能访问您的应用程序。通常,这两项工作被分配给不同的 Web 应用程序。看起来您的应用程序正在执行这两件事。
在某些情况下,您确实需要覆盖默认的OAuthBearerAuthenticationProvider
。也许你这样做,也许你不这样做。在我的例子中,ApplicationCookie
不太适合这个场景。因此,我将第 3 方 JWT token 存储在 cookie 中,而不是 header 中,并使用它来指示用户已通过 Web 应用程序的身份验证。我还需要重定向到我自己的登录页面,而不是提供 401。
这是一个同时实现这两个功能的实现:
public class CustomOAuthBearerProvider : IOAuthBearerAuthenticationProvider
{
public Task ApplyChallenge(OAuthChallengeContext context)
{
context.Response.Redirect("/Account/Login");
return Task.FromResult<object>(null);
}
public Task RequestToken(OAuthRequestTokenContext context)
{
string token = context.Request.Cookies[SessionKey];
if (!string.IsNullOrEmpty(token))
{
context.Token = token;
}
return Task.FromResult<object>(null);
}
public Task ValidateIdentity(OAuthValidateIdentityContext context)
{
return Task.FromResult<object>(null);
}
}
我不需要在 ValidateIdentity 中做任何特殊的事情,但我需要满足接口(interface)。
要连接起来,请告诉您的应用程序将 JwtBearerAuthentication 与您的提供商一起使用:
// controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AllowedAudiences = audiences.ToArray(),
IssuerSecurityTokenProviders = providers.ToArray(),
Provider = new CookieOAuthBearerProvider()
}
);
关于asp.net - 如何使用 OWIN OAuthBearerAuthentication 验证访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097221/
我已经为 Web API 设置了身份验证,这与此处的博客几乎相同 oauth-refresh-tokens来自 Taiseer Joudeh。 在我遇到问题之前,它工作得很好: 我们有用户 A 和用户
我想要什么: token 生成器使用 OAuthAuthorizationServer, token 使用者使用 OAuthBearerAuthentication(验证访问 token )。 使用
我正在开发 ASP.NET 5 应用程序,我想使用 JWT 来保护应用程序中的某些端点。目前,我们决定由我们(而不是第三方)发行 JWT,因为我们的所有客户均由应用程序“拥有”,即我们没有“外部”客户
我是一名优秀的程序员,十分优秀!