【问题标题】:OAuth and OWIN Authentication - ConfusionOAuth 和 OWIN 身份验证 - 混淆
【发布时间】:2018-06-04 11:44:06
【问题描述】:

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

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

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】:

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

    OIDC 基于 OAuth 2.0 构建,因此您可以使用它的所有功能。在实际情况下,您应该问自己的问题是:使用您的“代理”(授权服务器/安全令牌服务/OpenID 提供者)的其他应用程序(客户端、API)是否需要了解刚刚登录的用户的一些信息在?他们需要 ID、角色、用户名等吗?如果答案是否定的,而您只需要一个签名令牌,那么您可能会更好地使用 OAuth。

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

    【讨论】:

    • 感谢您的回复。是的,我通过资源服务器 api 公开用户属性(显示名称、电子邮件等)。因此,一旦用户拥有访问令牌,他将能够通过标记为 [Authorize] 的资源服务器 API 端点获取用户属性。上面的 MSFT 示例也说明了这一点。这会是个问题吗?
    • 我不认为这有什么问题 - 如果您有多个资源服务器(又名 API),它可能会变得乏味/不一致
    • 好的。感谢回复
    猜你喜欢
    • 2015-07-18
    • 2014-01-28
    • 2022-08-13
    • 1970-01-01
    • 2019-09-08
    • 2015-02-02
    • 2011-03-17
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多