Exemple #1
0
        public async Task <ActionResult> QQLogin(NewUserViewModel viewModel)
        {
            var owinContext = Request.GetOwinContext();
            var identity    = await owinContext.Environment.GetIdentityServerPartialLoginAsync();

            if (identity == null || identity.IsAuthenticated == false)
            {
                return(new HttpUnauthorizedResult());
            }

            var qqConnectProfile = new QQConnectProfile(identity.Claims);

            var newUser = new InMemoryUser
            {
                Username   = viewModel.UserName ?? "Default Name",
                Subject    = Guid.NewGuid().ToString(),
                Enabled    = true,
                Provider   = qqConnectProfile.Issuer,
                ProviderId = qqConnectProfile.OpenId,
                Claims     = new[]
                {
                    new Claim(Constants.ClaimTypes.NickName, qqConnectProfile.NickName),
                    new Claim(Constants.ClaimTypes.Picture, qqConnectProfile.Avatar),
                }
            };

            Users.All.Add(newUser);

            var resumeUrl = await owinContext.Environment.GetPartialLoginResumeUrlAsync();

            return(Redirect(resumeUrl));
        }
Exemple #2
0
        protected override async Task <HandleRequestResult> HandleRemoteAuthenticateAsync()
        {
            try
            {
                var code  = Request.Query["code"].ToString();
                var state = Request.Query["state"].ToString();

                if (code == null)
                {
                    return(HandleRequestResult.Fail("Code was not found."));
                }

                var properties = Options.StateDataFormat.Unprotect(state);
                if (properties == null)
                {
                    return(HandleRequestResult.Fail("The oauth state was missing or invalid."));
                }

                if (ValidateCorrelationId(properties) == false)
                {
                    return(HandleRequestResult.Fail("Correlation failed."));
                }

                var token = await InnerClient.GetTokenAsync(
                    code,
                    Context.RequestAborted);

                if (string.IsNullOrWhiteSpace(token.AccessToken))
                {
                    return(HandleRequestResult.Fail("OAuth token endpoint failure."));
                }

                var openId = await InnerClient.GetOpenIdAsync(
                    token.AccessToken,
                    Context.RequestAborted);

                if (string.IsNullOrWhiteSpace(openId.OpenId))
                {
                    return(HandleRequestResult.Fail("openid was not found."));
                }

                var user = await InnerClient.GetUserAsync(
                    token.AccessToken,
                    openId.OpenId,
                    Context.RequestAborted);

                var qqConnectProfile = QQConnectProfile.From(Scheme.Name, token, openId, user);

                var principal = qqConnectProfile.BuildClaimsPrincipal();

                var ticket = new AuthenticationTicket(principal, properties, Scheme.Name);

                return(HandleRequestResult.Success(ticket));
            }
            catch (Exception ex)
            {
                return(HandleRequestResult.Fail(ex));
            }
        }
Exemple #3
0
        public async Task <ActionResult> QQLogin()
        {
            var owinContext = Request.GetOwinContext();
            var identity    = await owinContext.Environment.GetIdentityServerPartialLoginAsync();

            if (identity == null || identity.IsAuthenticated == false)
            {
                return(new HttpUnauthorizedResult());
            }

            var qqConnectProfile = new QQConnectProfile(identity.Claims);

            return(View(new NewUserViewModel
            {
                UserName = qqConnectProfile.NickName,
                AvatarUrl = qqConnectProfile.Avatar
            }));
        }
Exemple #4
0
        protected override async Task <AuthenticationTicket> AuthenticateCoreAsync()
        {
            AuthenticationProperties properties = null;

            try
            {
                var code  = Request.Query.Get("code");
                var state = Request.Query.Get("state");

                properties = Options.StateDataFormat.Unprotect(state);
                if (properties == null)
                {
                    return(null);
                }

                if (!ValidateCorrelationId(properties, _logger))
                {
                    return(new AuthenticationTicket(null, properties));
                }

                if (code == null)
                {
                    return(new AuthenticationTicket(null, properties));
                }

                var token = await InnerHandler.GetTokenAsync(
                    code,
                    Request.CallCancelled);

                if (string.IsNullOrWhiteSpace(token.AccessToken))
                {
                    _logger.WriteError("access_token was not found");
                    return(new AuthenticationTicket(null, properties));
                }


                var openId = await InnerHandler.GetOpenIdAsync(
                    token.AccessToken,
                    Request.CallCancelled);

                if (string.IsNullOrWhiteSpace(openId.OpenId))
                {
                    _logger.WriteError("openid was not found");
                    return(new AuthenticationTicket(null, properties));
                }


                var user = await InnerHandler.GetUserAsync(
                    token.AccessToken,
                    openId.OpenId,
                    Request.CallCancelled);

                var identity = QQConnectProfile.BuildClaimsIdentity(Options.AuthenticationType, token, openId, user);

                return(new AuthenticationTicket(identity, properties));
            }
            catch (Exception ex)
            {
                _logger.WriteError("Authentication failed", ex);
                return(new AuthenticationTicket(null, properties));
            }
        }