我应该选择哪种OAuth2.0赠款

时间:2016-05-20 09:54:08

标签: jquery ajax asp.net-mvc asp.net-mvc-4 oauth-2.0

请参阅此decision template,以便为我的应用选择正确的授权类型。 enter image description here 我不太确定,使用哪种授权类型。

方案如下:

  1. 资源服务器,WebApi 2.0(域A)
  2. 授权服务器(域B)
  3. ASP.NET MVC Application,向资源服务器发出基于jQuery的Ajax请求
  4. 基本上我想要的是,我的MVC应用程序的所有登录用户都可以使用Bearer Auth立即从客户端浏览器直接向资源服务器发出ajax请求。

    访问令牌所有者将是浏览器用户代理,它将访问令牌存储在本地存储中,例如,对吗?每个登录用户都拥有自己的身份验证令牌。 MVC应用程序的客户端(浏览器)是"第一方"客户,对吗?

    最后会有什么样的授权类型 - >密码授予?

1 个答案:

答案 0 :(得分:1)

密码的grant_type为"密码"它自我。例如,从我的应用程序中获取此示例:

JAVASCRIPT - 使用带有OAuth2.0和c#WebAPI 2.0(MVC)的角度的Auth服务 - 使用的模式。

return $http({
                url: $rootScope.globals.apiPath + "/someController/token",
                method: 'POST',
                data: "userName=" + encodeURIComponent(username) +
                      "&password=" + encodeURIComponent(password) +
                      "&Scope=" + "website" +
                     "&grant_type=password" + // here I pass the type as password to the web api
                     "&client_id=clientIdExample",
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
            });

然后使用授权资源所有者凭据在API上处理,如下所示:

C# - API

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var source = LogUtility.InitializeContext(this.GetType());

            try
            {
                var allowedOrigin = context.OwinContext.Get<String>("clientAllowedOrigin") ?? "*";

                context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

                var signOnContext = await new AccessControlBusinessLogicLayer().LoadUserSignOnContextOrDefaultByCredentials(context.Options.AuthenticationType, context.UserName, context.Password);

                if (signOnContext == null)
                {
                    context.SetError("invalid_grant", "The user name or password is incorrect.");

                    return;
                }

                context.OwinContext.Set<String>("userSecurityStamp", signOnContext.SecurityStamp);

                var authenticationProperties = new AuthenticationProperties(
                    new Dictionary<String, String>
                    {
                        { "client_id", context.ClientId }
                    });
                var authenticationTicket = new AuthenticationTicket(signOnContext.Identity, authenticationProperties);

                if (context.Scope[0].ToLower() == "website")
                {
                    using (var userContext = new AccessControlContext())
                    {
                        using (var userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(
                            var user = AccessBL.LoadUserOrDefaultByUserName(context.UserName);

                            var userId = user.Id;
                        }
                    }
                }

                context.Validated(authenticationTicket);
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }

这将检查授权和当前用户的当前上下文。希望这有助于模糊。这意味着密码授予将是来自Web客户端的授权资源,而不是隐式资源。