应用程序.将OAuthBearerTokens与ASP.NET Identity 2.0's的DbContext



编辑:进展后,我可以缩小问题的范围:

VS2013 SPA模板(使用ASP.NET标识1.0)中的startup.auth.cs和ApplicationOAuthProvider.cs应进行哪些更改,以便将其迁移到使用ASP。NET身份2.0?

编辑2:我进一步简化了这个问题。如何使用应用程序。将OAuthBearerTokens与ASP。NET Identity 2.0的用于检索DbContext的中间件

app.UseOAuthBearerTokens(new Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerOptions()
{
//What goes here??
});

(在现有的样本中没有这样的例子。)

Asp.net身份框架的V1.0到V2.0alpha之间存在显著差异。有一个示例显示了如何使用V2:

https://aspnet.codeplex.com/SourceControl/latest(请参阅示例->标识->ChangePK)

但该示例不是MVC或SPA。话虽如此,我有一个从VS2013 ASP构建的应用程序。NET SPA应用程序(包含Identity 1.0)。我一直在尝试在MVC应用程序中实现示例中的代码,但我不清楚VS2013 SPA模板中的哪些代码被删除,以支持示例中的编码。

换一种方式问,有人对实现ASP有指导吗。NET身份2.0 alpha。NET MVC应用程序?(理想情况下,从利用身份1.0的VS2013 MVC SPA模板迁移步骤)

如果您正在研究如何为WEBAPI和MVC Cookie身份验证实现Bearer令牌,请查看本文:

ASP。NET Identity 2.0 Cookie&令牌身份验证,包括一个示例项目

简单地说,该解决方案使用OWIN中间件组件UseOAuthBearerAuthenticationUseCookieAuthentication(我知道Cookie-auth不是问题的一部分,但与MVC项目非常相关)分别通过CookieToken支持基于浏览器的身份验证和WEBAPI请求身份验证。

启动。Auth.cs

OAuthBearerOptions = new OAuthBearerAuthenticationOptions();
//This will used the HTTP header: "Authorization" Value: "Bearer 1234123412341234asdfasdfasdfasdf"
app.UseOAuthBearerAuthentication(OAuthBearerOptions);
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
}); 

HostAuthenticationFilter表示通过OWIN中间件进行身份验证的身份验证过滤器:

WebApiConfig.cs

config.SuppressDefaultHostAuthentication();
//This will used the HTTP header: "Authorization" Value: "Bearer 1234123412341234asdfasdfasdfasdf"
config.Filters.Add(new HostAuthenticationFilter("Bearer"));

要生成令牌:

var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userIdentity.Id));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
string AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
return AccessToken;

以下只是SPA模板中的代码,其中UserManager的提供程序被2.0 Identity中引入的内容所取代。

OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId, () => HttpContext.Current.GetOwinContext().Get<ApplicationUserManager>()),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = false
};

这里还有一个通用ApplicationOauthProvider,您可以使用:https://gist.github.com/s093294/9076631(注意,我还没有测试过,只是为你组装好)

示例(如果有):

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

你可以做

OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider<ApplicationUserManager,ApplicationUser,Guid>(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = false
};

相关内容

  • 没有找到相关文章

最新更新