- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 WebApi 系统中实现 ASP.Net Identity 2。要管理新帐户的电子邮件确认,我必须创建一个自定义 ApplicationUserManager
并注册它,以便为每个请求创建它:
public class IdentityConfig{
public static void Initialize(IAppBuilder app)
{
[snip]
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
它在 ApiController 中正常工作,如下所示:
public class AccountController : ApiController
{
public ApplicationUserManager UserManager
{
get
{
return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
我面临的问题是,在我尝试在 OAuth token 创建方法中访问它之前,没有调用 ApplicationUserManager.Create
方法:
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var mgr = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
在上面的代码中,mgr 为 null,因为 GetUserManager 检索到 null
token 创建方法是否在管道中处于较早位置,以至于尚未调用 CreatePerOwinContext
方法?如果是这样,缓存 ApplicationUserManager
以便可以在 GrantResourceOwnerCredentials
内部使用的最佳方法是什么?
最佳答案
这个很棘手。事实证明,启动代码必须按照一定的顺序完成。
这段代码可以工作。
public class IdentityConfig{
public static void Initialize(IAppBuilder app)
{
// correct... first create DB context, then user manager, then register OAuth Provider
app.CreatePerOwinContext(AuthContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
}
如果您更改在应用程序中注册代码的顺序,可能会产生意想不到的后果。此代码导致 ApplicationUserManager 在 token 生成方法 GrantResourceOwnerCredentials 中为 null
// wrong... these two lines must be after the ApplicationUserManager.Create line
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
[snip]
app.CreatePerOwinContext(AuthContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
当我这样做时,还有另一件事可能会绊倒别人。这些行导致 AuthContext 在 token 生成方法 GrantResourceOwnerCredentials 内为 null
// wrong... The AuthContext must be instantiated before the ApplicationUserManager
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext(AuthContext.Create);
[snip]
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
关于asp.net-identity - 自定义 UserManager 在 OAuthAuthorizationServerProvider 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731893/
我正在使用不记名 token 为 OAuth 2 配置 AspNet.Identity,我看到了多个实现 OAuthAuthorizationServerProvider.GrantRefreshTo
我正在创建一个 Web Api 应用程序,并且我想使用不记名 token 进行用户身份验证。 我实现了 token 逻辑,遵循 this post一切似乎都很好。 注意:我没有使用 ASP.NET 身
将 IOwinContext 注入(inject)我的 OAuthAuthorizationServerProvider 时出现问题。 在我的 Startup.cs 中有一行: public sta
我正在构建一个使用 token 进行授权的 web.api 服务。我遵循了 Dominick Baier 在他的博客中使用的指南 here . 今天我更新了 Owin、Entity Framework
依赖注入(inject)的新手,所以这可能是一件简单的事情,但我已经尝试过但无法弄清楚,我正在使用简单注入(inject)器。 我有一个使用 SimpleInjector 的 WebApi 非常好,现
在我的 WebAPI 项目中,我使用 Owin.Security.OAuth添加 JWT 身份验证。里面GrantResourceOwnerCredentials在我的 OAuthProvider 中
我正在尝试使用 OWIN 为本地 Intranet 上的 Web API v2 端点实现 OAuth。 API 使用内置的 Windows 身份验证托管在 IIS 中。简而言之,这就是我想要发生的事情
我们有一个 .Net Web API (v2),为 SPA 提供服务,我希望使用 OAuth 2 来保护该 SPA。 在我的 OWIN Startup.Configuration() 中,我将 IAp
我正在 WebApi 系统中实现 ASP.Net Identity 2。要管理新帐户的电子邮件确认,我必须创建一个自定义 ApplicationUserManager 并注册它,以便为每个请求创建它:
这个问题是我上一个问题的延续:ASP.Net Identity 2 login using password from SMS - not using two-factor authenticatio
我刚才使用 OAuthAuthorizationServerProvider 设置了基于 JWT token 的身份验证。提供者看起来像这样: public class OAuthProvider :
我必须将 Oauth 与 Autofac 集成。但是出了点问题。我想我明白为什么,但我不知道如何解决。我让你看看我的代码。 我的 Autofac 配置 { builder.RegisterTy
我是一名优秀的程序员,十分优秀!