コード例 #1
0
        private async Task <AccessTokenItem> RequestNewToken(string clientName, string apiScope, string secret)
        {
            try
            {
                var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(_httpClient, "http://localhost:5000");

                if (disco.IsError)
                {
                    throw new ApplicationException($"Error: {disco.Error}");
                }

                var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(_httpClient, new ClientCredentialsTokenRequest
                {
                    Scope        = apiScope,
                    ClientId     = clientName,
                    ClientSecret = secret,
                    Address      = disco.TokenEndpoint
                });

                if (tokenResponse.IsError)
                {
                    throw new ApplicationException($"Error: {tokenResponse.Error}");
                }

                return(new AccessTokenItem
                {
                    AccessToken = tokenResponse.AccessToken,
                    Expiry = DateTime.UtcNow.AddSeconds(tokenResponse.ExpiresIn)
                });
            }
            catch (Exception ex)
            {
                throw new ApplicationException($"Exceptions: {ex}");
            }
        }
コード例 #2
0
ファイル: ApiService.cs プロジェクト: skclusive/Secure_gRpc
        public async Task <string> GetAccessTokenAsync()
        {
            try
            {
                var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(_tokenclient, stsServer);

                if (disco.IsError)
                {
                    throw new ApplicationException($"Status code: {disco.IsError}, Error: {disco.Error}");
                }

                var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(_tokenclient, new ClientCredentialsTokenRequest
                {
                    Scope        = "grpc_protected_scope",
                    ClientSecret = "grpc_protected_secret",
                    Address      = disco.TokenEndpoint,
                    ClientId     = "ProtectedGrpc"
                });

                if (tokenResponse.IsError)
                {
                    throw new ApplicationException($"Status code: {tokenResponse.IsError}, Error: {tokenResponse.Error}");
                }

                return(tokenResponse.AccessToken);

                //throw new ApplicationException($"Status code: {response.StatusCode}, Error: {response.ReasonPhrase}");
            }
            catch (Exception e)
            {
                throw new ApplicationException($"Exception {e}");
            }
        }
コード例 #3
0
 public Task <TokenResponse> RequestClientCredentialsTokenAsync(HttpClient client,
                                                                ClientCredentialsTokenRequest request)
 {
     return(request == null?
            null:
            HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(client, request));
 }
コード例 #4
0
        public async Task <string> GetAccessTockenAsync()
        {
            var identityServerAddress = config["IdentityServer:URL"];

            try
            {
                var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(httpClient, identityServerAddress);

                if (disco.IsError)
                {
                    throw new ApplicationException($"Status code: {disco.IsError}, Error: {disco.Error}");
                }

                var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(httpClient, new ClientCredentialsTokenRequest
                {
                    Scope        = config["ClientIdentity:Scope"],
                    ClientSecret = config["ClientIdentity:ClientSecret"],
                    Address      = disco.TokenEndpoint,
                    ClientId     = config["ClientIdentity:ClientId"]
                });

                if (tokenResponse.IsError)
                {
                    throw new ApplicationException($"Status code: {tokenResponse.IsError}, Error: {tokenResponse.Error}");
                }

                return(tokenResponse.AccessToken);
            }
            catch (Exception e)
            {
                throw new ApplicationException($"Exception {e}");
            }
        }
コード例 #5
0
        public async Task <IActionResult> RenewTokens()
        {
            var tokenclient = _clientFactory.CreateClient();

            var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(
                tokenclient,
                _optionsAuthConfiguration.StsServerIdentityUrl);

            if (disco.IsError)
            {
                throw new ApplicationException($"Status code: {disco.IsError}, Error: {disco.Error}");
            }

            var rt = await HttpContext.GetTokenAsync("refresh_token");

            var tokenResult = await HttpClientTokenRequestExtensions.RequestRefreshTokenAsync(tokenclient, new RefreshTokenRequest
            {
                ClientSecret = "secret",
                Address      = disco.TokenEndpoint,
                ClientId     = "mvc.hybrid.backchannel",
                RefreshToken = rt
            });

            if (!tokenResult.IsError)
            {
                var old_id_token = await HttpContext.GetTokenAsync("id_token");

                var new_access_token  = tokenResult.AccessToken;
                var new_refresh_token = tokenResult.RefreshToken;

                var tokens = new List <AuthenticationToken>
                {
                    new AuthenticationToken {
                        Name = OpenIdConnectParameterNames.IdToken, Value = old_id_token
                    },
                    new AuthenticationToken {
                        Name = OpenIdConnectParameterNames.AccessToken, Value = new_access_token
                    },
                    new AuthenticationToken {
                        Name = OpenIdConnectParameterNames.RefreshToken, Value = new_refresh_token
                    }
                };

                var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(tokenResult.ExpiresIn);
                tokens.Add(new AuthenticationToken {
                    Name = "expires_at", Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
                });

                var info = await HttpContext.AuthenticateAsync("Cookies");

                info.Properties.StoreTokens(tokens);
                await HttpContext.SignInAsync("Cookies", info.Principal, info.Properties);

                return(Redirect("~/Home/Secure"));
            }

            ViewData["Error"] = tokenResult.Error;
            return(View("Error"));
        }
コード例 #6
0
        private async Task <string> RequestToken()
        {
            var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(_httpClient, "http://localhost:5000");

            var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(_httpClient, new ClientCredentialsTokenRequest
            {
                Scope        = "blazorcontracts-api",
                ClientSecret = "secret",
                Address      = disco.TokenEndpoint,
                ClientId     = "blazorcontracts-web"
            });

            return(tokenResponse.AccessToken);
        }
コード例 #7
0
        public async Task <JArray> GetApiDataAsync()
        {
            try
            {
                var tokenclient = _clientFactory.CreateClient();

                var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(tokenclient, _authConfigurations.Value.StsServer);

                if (disco.IsError)
                {
                    throw new ApplicationException($"Status code: {disco.IsError}, Error: {disco.Error}");
                }

                var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(tokenclient, new ClientCredentialsTokenRequest
                {
                    Scope        = "scope_used_for_api_in_protected_zone",
                    ClientSecret = "api_in_protected_zone_secret",
                    Address      = disco.TokenEndpoint,
                    ClientId     = "ProtectedApi"
                });

                if (tokenResponse.IsError)
                {
                    throw new ApplicationException($"Status code: {tokenResponse.IsError}, Error: {tokenResponse.Error}");
                }

                var client = _clientFactory.CreateClient();

                client.BaseAddress = new Uri(_authConfigurations.Value.ProtectedApiUrl);
                client.SetBearerToken(tokenResponse.AccessToken);

                var response = await client.GetAsync("api/values");

                if (response.IsSuccessStatusCode)
                {
                    var responseContent = await response.Content.ReadAsStringAsync();

                    var data = JArray.Parse(responseContent);

                    return(data);
                }

                throw new ApplicationException($"Status code: {response.StatusCode}, Error: {response.ReasonPhrase}");
            }
            catch (Exception e)
            {
                throw new ApplicationException($"Exception {e}");
            }
        }
コード例 #8
0
    private async Task <AccessTokenItem> getApiToken(string api_name, string api_scope, string secret)
    {
        try
        {
            var disco = await HttpClientDiscoveryExtensions.GetDiscoveryDocumentAsync(
                _httpClient,
                _authConfigurations.Value.StsServer);

            if (disco.IsError)
            {
                _logger.LogError($"disco error Status code: {disco.IsError}, Error: {disco.Error}");
                throw new ApplicationException($"Status code: {disco.IsError}, Error: {disco.Error}");
            }

            var tokenResponse = await HttpClientTokenRequestExtensions.RequestClientCredentialsTokenAsync(_httpClient, new ClientCredentialsTokenRequest
            {
                Scope        = api_scope,
                ClientSecret = secret,
                Address      = disco.TokenEndpoint,
                ClientId     = api_name
            });

            if (tokenResponse.IsError)
            {
                _logger.LogError($"tokenResponse.IsError Status code: {tokenResponse.IsError}, Error: {tokenResponse.Error}");
                throw new ApplicationException($"Status code: {tokenResponse.IsError}, Error: {tokenResponse.Error}");
            }

            return(new AccessTokenItem
            {
                ExpiresIn = DateTime.UtcNow.AddSeconds(tokenResponse.ExpiresIn),
                AccessToken = tokenResponse.AccessToken
            });
        }
        catch (Exception e)
        {
            _logger.LogError($"Exception {e}");
            throw new ApplicationException($"Exception {e}");
        }
    }