OAuth和OWIN身份验证 - 混乱

问题描述 投票:0回答:1

我被要求创建一个“身份验证/授权”中间人或代理作为http,MVC Web应用程序,以便这可以用于我们组织中的多个应用程序以进行身份​​验证/授权。意味着,用户将注册,登录此经纪人应用程序并且一旦确认经过身份验证的授权用户,他将相应地重定向到客户端应用程序。这是用例。

我选择OAuth和OWIN在MVC应用程序中开发此代理,这意味着一旦用户成功通过身份验证,OAuth(授权)将发出访问令牌+刷新令牌。我在Oauth Authorization Server的登录控制器中使用普通,简单,最小的身份验证逻辑,如下所示:

public class AccountController : Controller
{
    public ActionResult Login()
    {
        var authentication = HttpContext.GetOwinContext().Authentication;
        if (Request.HttpMethod == "POST")
        {
            var isPersistent = !string.IsNullOrEmpty(Request.Form.Get("isPersistent"));

            if (!string.IsNullOrEmpty(Request.Form.Get("submit.Signin")))
            {
             var user = Constants.Users.UserCollection.Where(u => u.Email.ToLower() == Request.Form["username"].ToLower().Trim() && u.Password == Request.Form["password"].Trim());

                if (user.Count() > 0)
                {
                    authentication.SignIn(
                        new AuthenticationProperties { IsPersistent = isPersistent },
                        new ClaimsIdentity(new[]
                        { new Claim(ClaimsIdentity.DefaultNameClaimType, Request.Form["username"]),
                         new Claim("DisplayName", user.FirstOrDefault().DisplayName) } , "Application"));                          


                }
            }
        }

        return View();
    }

这是我正在开发这个概念性应用程序的MSFT示例应用程序。 https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

我的问题是:我在许多文章中都读到过,使用Oauth身份验证并不好,否则请使用OPENID Connect处理身份验证。坦率地说,我不习惯使用OPENID Connect,我不确定为我的组织创建OPENID提供程序的必要性,因为此服务仅供我们组织的客户使用 - 少于200,000个用户。我们几乎不需要用户注册和登录,此帐户需要在我们组织的不同Web应用程序中使用。请在这里帮助我提供您的意见。提前致谢。

asp.net-mvc oauth-2.0 owin openid-connect dotnetopenauth
1个回答
0
投票

我认为您的问题是关于OpenID Connect(OIDC)相对于OAuth 2.0的好处。

OIDC以OAuth 2.0为基础,因此您可以使用它的所有功能。在实际环境中,您应该问自己的问题是:使用您的“代理”(授权服务器/安全令牌服务/ OpenID提供商)的其他应用程序(客户端,API)是否需要了解有关用户的信息,在?他们需要ID,角色,用户名等吗?如果答案是否定的,并且您只需要一个签名令牌,则可能更适合使用OAuth。

如果您开始在访问令牌中包含用户声明(=属性),您至少应该看看OIDC。另请注意,即使您在访问令牌中包含声明,这些声明也适用于资源服务器(= API),并且对于客户端而言通常是不可访问的(除非您提取它们并在API端公开它们 - 这基本上就是OIDC userinfo端点确实)。

© www.soinside.com 2019 - 2024. All rights reserved.