Beispiel #1
0
        public async Task <IEndpointResult> ProcessAsync(HttpContext context)
        {
            _logger.LogTrace("Processing discovery request.");

            // validate HTTP
            if (context.Request.Method != "GET")
            {
                _logger.LogWarning("Discovery endpoint only supports GET requests");
                return(new StatusCodeResult(HttpStatusCode.MethodNotAllowed));
            }

            _logger.LogDebug("Start discovery request");

            if (!_options.Endpoints.EnableDiscoveryEndpoint)
            {
                _logger.LogInformation("Discovery endpoint disabled. 404.");
                return(new StatusCodeResult(HttpStatusCode.NotFound));
            }

            var baseUrl   = context.GetIdentityServerBaseUrl().EnsureTrailingSlash();
            var issuerUri = context.GetIdentityServerIssuerUri();

            // generate response
            _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
            var response = await _responseGenerator.CreateDiscoveryDocumentAsync(baseUrl, issuerUri);

            return(new DiscoveryDocumentResult(response, _options.Discovery.ResponseCacheInterval));
        }
Beispiel #2
0
        public async Task <IEndpointResult> ProcessAsync(HttpContext context)
        {
            _logger.LogTrace("Processing discovery request.");

            // validate HTTP
            if (!HttpMethods.IsGet(context.Request.Method))
            {
                _logger.LogWarning("Discovery endpoint only supports GET requests");
                return(new StatusCodeResult(HttpStatusCode.MethodNotAllowed));
            }

            _logger.LogDebug("Start key discovery request");

            if (_options.Discovery.ShowKeySet == false)
            {
                _logger.LogInformation("Key discovery disabled. 404.");
                return(new StatusCodeResult(HttpStatusCode.NotFound));
            }

            // generate response
            _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
            var response = await _responseGenerator.CreateJwkDocumentAsync();

            return(new JsonWebKeysResult(response, _options.Discovery.ResponseCacheInterval, _options.Discovery.JwkSetContentType));
        }
Beispiel #3
0
        public Task <IEndpointResult> ProcessAsync(HttpContext context)
        {
            _logger.LogTrace("Processing discovery request.");

            // validate HTTP
            if (!HttpMethods.IsGet(context.Request.Method))
            {
                _logger.LogWarning("Discovery endpoint only supports GET requests");
                return(Task.FromResult((IEndpointResult) new StatusCodeResult(HttpStatusCode.MethodNotAllowed)));
            }

            if (!_options.Endpoints.EnableDiscoveryEndpoint)
            {
                _logger.LogInformation("Discovery endpoint disabled. 404.");
                return(Task.FromResult((IEndpointResult) new StatusCodeResult(HttpStatusCode.NotFound)));
            }

            var baseUrl   = context.GetIdentityServerBaseUri();
            var issuerUri = context.GetIdentityServerIssuerUri();

            // generate response
            _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
            var response = _responseCache.GetOrAdd(1, _ => _responseGenerator.CreateDiscoveryDocumentAsync(baseUrl, issuerUri).GetAwaiter().GetResult());

            _logger.LogTrace("Discovery request completed. Return DiscoveryDocumentResult");
            return(Task.FromResult((IEndpointResult) new DiscoveryDocumentResult(response, _options.Discovery.ResponseCacheInterval)));
        }
    public async Task <IEndpointResult> ProcessAsync(HttpContext context)
    {
        using var activity = Tracing.BasicActivitySource.StartActivity(Constants.EndpointNames.Discovery + "Endpoint");

        _logger.LogTrace("Processing discovery request.");

        // validate HTTP
        if (!HttpMethods.IsGet(context.Request.Method))
        {
            _logger.LogWarning("Discovery endpoint only supports GET requests");
            return(new StatusCodeResult(HttpStatusCode.MethodNotAllowed));
        }

        _logger.LogDebug("Start discovery request");

        if (!_options.Endpoints.EnableDiscoveryEndpoint)
        {
            _logger.LogInformation("Discovery endpoint disabled. 404.");
            return(new StatusCodeResult(HttpStatusCode.NotFound));
        }

        var baseUrl   = _urls.BaseUrl;
        var issuerUri = await _issuerNameService.GetCurrentAsync();

        // generate response
        _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
        var response = await _responseGenerator.CreateDiscoveryDocumentAsync(baseUrl, issuerUri);

        return(new DiscoveryDocumentResult(response, _options.Discovery.ResponseCacheInterval));
    }
Beispiel #5
0
        private async Task <IEndpointResult> ExecuteDiscoDocAsync(HttpContext context)
        {
            _logger.LogDebug("Start discovery request");

            if (!_options.Endpoints.EnableDiscoveryEndpoint)
            {
                _logger.LogInformation("Discovery endpoint disabled. 404.");
                return(new StatusCodeResult(HttpStatusCode.NotFound));
            }

            var baseUrl   = context.GetIdentityServerBaseUrl().EnsureTrailingSlash();
            var issuerUri = context.GetIdentityServerIssuerUri();

            // generate response
            _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
            var response = await _responseGenerator.CreateDiscoveryDocumentAsync(baseUrl, issuerUri);

            return(new DiscoveryDocumentResult(response, _options.Discovery.ResponseCacheInterval));
        }
Beispiel #6
0
        public Task <IEndpointResult> ProcessAsync(HttpContext context)
        {
            _logger.LogTrace("Processing discovery request.");

            // validate HTTP
            if (!HttpMethods.IsGet(context.Request.Method))
            {
                _logger.LogWarning("Discovery endpoint only supports GET requests");
                return(Task.FromResult((IEndpointResult) new StatusCodeResult(HttpStatusCode.MethodNotAllowed)));
            }

            if (!_options.Discovery.ShowKeySet)
            {
                _logger.LogInformation("Key discovery disabled. 404.");
                return(Task.FromResult((IEndpointResult) new StatusCodeResult(HttpStatusCode.NotFound)));
            }

            // generate response
            _logger.LogTrace("Calling into discovery response generator: {type}", _responseGenerator.GetType().FullName);
            var response = _responseCache.GetOrAdd(1, _ => _responseGenerator.CreateJwkDocumentAsync().GetAwaiter().GetResult());

            _logger.LogTrace("Discovery request completed. Return JsonWebKeysResult");
            return(Task.FromResult((IEndpointResult) new JsonWebKeysResult(response, _options.Discovery.ResponseCacheInterval)));
        }
        private async Task <Dictionary <string, string> > FetchDiscoveryData(HttpContext httpContext)
        {
            if (_endpointDictionary == null)
            {
                var baseUrl    = httpContext.GetIdentityServerBaseUrl().EnsureTrailingSlash();
                var issuerUri  = httpContext.GetIdentityServerIssuerUri();
                var index      = issuerUri.IndexOf("://") + 3;
                var runningUri = issuerUri.Substring(index);
                index = runningUri.IndexOf('/');
                var baseUrlSegment = index >= 0?runningUri.Substring(index):"";
                // generate response
                _logger.LogTrace("Calling into discovery response generator: {type}",
                                 _responseGenerator.GetType().FullName);
                var response = await _responseGenerator.CreateDiscoveryDocumentAsync(baseUrl, issuerUri);

                var issuer = response["issuer"] as string;

                _endpointDictionary = new Dictionary <string, string>
                {
                    {
                        "discovery",
                        $"{baseUrlSegment}/.well-known/openid-configuration"
                    },
                    {
                        "jwks_uri",
                        $"{baseUrlSegment}{(response["jwks_uri"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "authorization_endpoint",
                        $"{baseUrlSegment}{(response["authorization_endpoint"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "token_endpoint",
                        $"{baseUrlSegment}{(response["token_endpoint"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "userinfo_endpoint",
                        $"{baseUrlSegment}{(response["userinfo_endpoint"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "end_session_endpoint",
                        $"{baseUrlSegment}{(response["end_session_endpoint"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "check_session_iframe",
                        $"{baseUrlSegment}{(response["check_session_iframe"] as string).Substring(issuer.Length)}"
                    },

                    {
                        "revocation_endpoint",
                        $"{baseUrlSegment}{(response["revocation_endpoint"] as string).Substring(issuer.Length)}"
                    },
                    {
                        "introspection_endpoint",
                        $"{baseUrlSegment}{(response["introspection_endpoint"] as string).Substring(issuer.Length)}"
                    }
                };
            }

            return(_endpointDictionary);
        }