Exemple #1
0
        public async Task <GetPasswordAccessTokenResponse> GetPasswordAccessToken(GetPasswordAccessTokenRequest request)
        {
            var doc = await GetDiscoveryDocument();

            var response = await _httpClient.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address = doc.TokenEndpoint,

                ClientId     = _options.ClientId,
                ClientSecret = _options.ClientSecret,
                Scope        = _options.Scope,
                UserName     = request.UserName,
                Password     = request.Password,
            });

            if (response.IsError)
            {
                throw new AuthorizeFailedException(response.Error, response.Exception);
            }

            return(new GetPasswordAccessTokenResponse
            {
                AccessToken = response.AccessToken,

                Type = response.TokenType,
                ExpiresIn = response.ExpiresIn,
                RefreshToken = response.RefreshToken
            });
        }
        public async Task Authorization(string username, string password)
        {
            var request = new GetPasswordAccessTokenRequest
            {
                UserName = username,
                Password = password
            };

            try
            {
                var client   = _factory.Create(AuthorizationType.IdentityAuthentication);
                var response = await client.GetPasswordAccessToken(request);

                var @event = new IdentityAuthorizationSuccessEvent
                {
                    AccessToken  = response.AccessToken,
                    RefreshToken = response.RefreshToken,
                    Type         = response.Type,
                    ExpiresIn    = response.ExpiresIn
                };

                await _eventBus.Publish(@event, CancellationToken.None);
            }
            catch (Exception ex)
            {
                throw new InvalidAuthenticationExcption("无效身份信息");
            }
        }