我可以在Owin中使用两种身份验证方法吗?

时间:2016-06-09 16:22:52

标签: asp.net-mvc authentication asp.net-web-api oauth owin

在我的应用程序中,我使用MVC和Web.API。

MVC部分处理管理员前端,提供cshtml页面,与后端进行通信,使用cookie进行常规身份验证等:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login")
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

Web.API处理iOS和Android应用程序发出的REST请求。对于那个我想使用基于令牌的身份验证:

var oAuthServerOptions = new OAuthAuthorizationServerOptions
{
    AllowInsecureHttp = true, //todo-err: change in prod
    TokenEndpointPath = new PathString("/token"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
    Provider = new SimpleAuthorizationServerProvider()
};

// Token Generation
app.UseOAuthAuthorizationServer(oAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

我的问题是,我需要做些什么?常规和令牌认证。我是否需要为API控制器创建自定义AuthorizeAttribute?

我感谢任何帮助:)

2 个答案:

答案 0 :(得分:1)

您的 SimpleAuthorizationServerProvider 需要实施。 使用身份验证在VS2015中生成WebAPI项目会为您提供something like this

答案 1 :(得分:0)

Kelvin Amorim的文章Applying Cookie-Stored Sessions With ASP.NET and OpenID Connect 1.0对于理解支持多种身份验证中间件的多种因素非常有用。

一些要点是:

  • 每个身份验证选项中间件都应使用不同的AuthenticationType(它只是一个字符串密钥,并且有一些默认值可供选择)
  • 您可以设置cookie路径并使用相应的MVC 区域(请参见RouteAreaAttribute)来控制将哪些cookie用于哪些请求