我对实际身份验证的工作方式非常困惑,以致class MyClass {
constructor(databaseURL) {
this.url = databaseURL;
}
async init() {
//make connection to database
}
async complete_TaskA_onDB() {
//...
}
async complete_TaskB_onDB() {
//...
}
async close_connection() {
//close connection to database
}
}
不会将我重定向到登录页面。
这是我的配置:
//constructor()
this.db = new MongoClient(new Server(dbHost, dbPort));
//init()
this.db.open();
//taskA()
this.db.collection(...).update(...);
//close_connection()
this.db.close();
在控制器中,我想调用[Authorize]
方法,对用户进行身份验证并返回布尔值。但是,我不知道实际的身份验证如何工作。
在public class IdentityConfig
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(() => new MyANTon.DataContext.AntContext());
app.CreatePerOwinContext<UserManager>(UserManager.Create);
app.CreatePerOwinContext<RoleManager<AppRole>>((options, context) =>
new RoleManager<AppRole>(
new RoleStore<AppRole>(context.Get<MyANTon.DataContext.AntContext>())));
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Home/Login"),
});
}
}
中,我将创建一个票证,该如何处理身份?
这就是我所拥有的:
Authenticate(string Email, String Password)
答案 0 :(得分:1)
您正在朝正确的方向前进,您正在做的就是使用OAuth简化令牌的映射,并让OWin处理浏览器信息。因此,通过像您一样使用[Authorize]属性,您如何处理身份签名?就像上面提到的Forms身份验证一样,您仍然必须创建Identity / Claim令牌。在我的项目中,我做这样的事情
protected void IdentitySignin(IUserModel userModel, string providerKey = null, bool isPersistent = true)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, userModel.Id.ToString()),
new Claim(ClaimTypes.Name, userModel.UserName),
new Claim("UserContext", userModel.ToString())
};
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = isPersistent,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
}, identity);
}
这将强制OWIN / OAuth登录用户,并且在我的web.config中,我具有以下内容:
<system.webserver>
<authentication mode="None" />
</system.webserver>
然后注销我的用户,并强制浏览器获取新令牌:
protected void IdentitySignout()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie,
DefaultAuthenticationTypes.ExternalCookie);
}
我的AuthenticationManager定义如下:
private IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
这是Microsoft.OWin.IOwinContext的一部分,如果该引用不存在,则必须添加该引用。
您可以通过web.config文件或基本控制器处理未经授权的用户,我选择了基本控制器选项,如下所示:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (UserContext == null || UserContext.Id.Equals(Guid.Empty))
{
if (filterContext.Controller.GetType() == typeof(AccountController) || filterContext.Controller.GetType() == typeof(HomeController)) return;
filterContext.Result = new RedirectResult("/Home/Index");
return;
}
}
但是,如果需要,您也可以通过AuthorizeAttribute来实现。该链接将详细介绍如何处理Oauth和Asp.Net MVC,乍一看似乎令人生畏,但如果您决定将其他提供程序纳入发行版,则它为使用其他提供程序提供了很好的布局。
https://www.codeproject.com/Articles/577384/Introduction-to-OAuth-in-ASP-NET-MVC
答案 1 :(得分:0)
当您想Login
进入web-site
时,可以将token
发送到client
,然后您可以将其用于请求和响应,换句话说,您必须从服务器端登录。
但是,当您想从logout
来web-site
时,客户端必须知道您想要logout
这不仅适用于服务器,客户端应针对日志记录执行此操作
我想建议你Token-JWT
如果您想了解JWT,请单击here
如果您愿意,我会为您创建一个示例。