gpt4 book ai didi

.net - 基于 OWIN 在 MVC 5 中为多个 Web 应用程序设置表单例份验证

转载 作者:行者123 更新时间:2023-12-03 04:55:44 25 4
gpt4 key购买 nike

我正在设置我的第一个 MVC Web 应用程序。我知道我需要提供基于表单的身份验证模型,并且我也知道我还将在多个其他内部 Web 应用程序中重复使用它。

MVC 5 身份验证的所有文档(我认为全部基于 OWIN 内容)都使用 EF Code First 将其“烘焙”到单个 Web 应用程序中。

我正在尝试的是拥有另一个网络应用程序,我将除帐户内容之外的所有内容都剥离出来,然后尝试将我的网络应用程序身份验证“指向”该应用程序并让它返回一个“ token ”,我是猜测我的经过身份验证的用户和他/她的“角色”。

我走在正确的道路上吗?我是不是把这件事复杂化了?我是网络开发新手,但这似乎是一个相当合理且简单的请求。傻眼了,到处都找不到。

最佳答案

Detailed explanation我正在寻找一种使用 OWIN 而不是 FormsAuthentication 的方法,但没有所有用户管理器、用户存储的东西。我想你也想要同样的。

在您的登录操作中,使用您自己的代码检查数据库中的用户凭据,如果用户正确,则使用所需信息创建声明并使用这些声明调用 AuthenticationManager.SignIn:

var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
,new Claim(ClaimTypes.Name, user.UserName)
,new Claim(ClaimTypes.Email, user.Email)
};
var identity = new ClaimsIdentity(claims,
DefaultAuthenticationTypes.ApplicationCookie);

HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);

现在您已登录,就像 FormsAuthentication.SetAuthCookie 方法一样。

现在您可以通过声明获取用户信息:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
var ctx = filterContext.HttpContext.Request.GetOwinContext();
var identity = (ClaimsPrincipal)filterContext.HttpContext.User;
var enumerable = identity.Claims as IList<Claim> ?? identity.Claims.ToList();
var username = enumerable.Where(x => x.Type == ClaimTypes.Name).Select(x => x.Value).FirstOrDefault();
var userId = enumerable.Where(x => x.Type == ClaimTypes.NameIdentifier).Select(x => x.Value).FirstOrDefault();

}
base.OnActionExecuting(filterContext);
}

你可以控制它,而不是 MVC 模板附带的所有 EF Code 拳头东西

关于.net - 基于 OWIN 在 MVC 5 中为多个 Web 应用程序设置表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com