我尝试在不使用ASP.NET身份的情况下对ASP.NET 5 MVC6 beta5使用OAuth身份验证。
现在,我已经实施了一个简单的cookie身份验证,如果登录表单中指定的登录名存在于数据库中,则无论输入的密码是什么(我都不会为用户存储密码)数据库)。
以下是我使用的软件包:
"dependencies": {
"Microsoft.AspNet.Authentication": "1.0.0-beta5",
"Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta5",
"Microsoft.AspNet.Authentication.OAuth": "1.0.0-beta5",
"Microsoft.AspNet.Mvc": "6.0.0-beta5",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta5",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
"Microsoft.AspNet.Http": "1.0.0-beta5",
"Microsoft.AspNet.Server.IIS": "1.0.0-beta5",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta5",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-beta5",
"Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta5",
"Microsoft.Framework.Logging": "1.0.0-beta5",
"Microsoft.Framework.Logging.Console": "1.0.0-beta5",
"Microsoft.Net.Http.Server": "1.0.0-beta5",
"EntityFramework": "6.1.3",
},
我在Startup.cs配置方法中设置了这样的cookie身份验证(就在app.UseMvc之前):
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthentication = true;
options.LoginPath = new PathString("/Account/Login");
});
这是我在帐户控制器中的登录方法:
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult Login(LoginViewModel model, string returnUrl = null)
{
ViewBag.ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
User user = securityService.FindUserByUserName(model.UserName);
if (user != null)
{
var claims = new List<Claim> { new Claim(ClaimTypes.Name, user.UserName) };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
Context.Authentication.SignIn(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
}
return View(model);
}
这是位于帐户控制器中的LogOff方法:
//
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult LogOff()
{
Context.Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToAction("Login");
}
现在,我想使用此处演示的OAuth身份验证中间件来针对AD FS对用户进行身份验证:Authenticating ASP.NET 5 to AD FS OAuth
但我不知道如何在Login操作中指定使用此中间件进行身份验证(同时传递登录视图中输入的登录名和密码)。
有什么想法吗?
答案 0 :(得分:0)
如果您想要显示Auth类型并根据源或其他因素进行隔离,我会深入研究MVC6过滤器,
特别是授权。如果你想做一个混合(如果外部用户是cookie,如果是内部的话,通过ADFS的oauth,你可以登录发回一个差异路由:即/ api /登录vs /登录基于输入。所以,如果你正在尝试一个表格,比如,一个复选框,一个选择或一些元素来指定ADFS路由与Cookie路由,您收集您的区别标准,并在登录帖子上根据他们的选择指导操作。您可以决定是否喜欢客户端驱动或服务器驱动技术更多。无论哪种方式,代码都可以使用该路由或发布数据附录来引导路径,并且在Startup
中,您可以执行以下操作:
public class Startup
{
public void Configure(IApplicationBuilder app, ILoggerFactory log, IHostingEnvironment env)
{
app.Map(new PathString("oauth"), Action<IApplicationBuilder> x =>
{
x.UseOAuthAuthentication(); ...
});
app.Map(new PathString("cookie"), Action<IApplicationBuilder> x => {
x.UseCookieAuthentication(); ....
});
一般要点是,如果您需要支持多个证券,您可以建立分支映射,
但如果您只是单独使用OAuth,只需在ConfigureServices(IServiceCollection service)
并使用
中的设置调用DI实例Configure(IApplicationBuilder app){
app.USeCookieAuthentication();
}