GetDiscoveryDocumentAsync не может найти URL-адрес прав доступа - IdentiyServer4 - PullRequest
0 голосов
/ 11 февраля 2019

Я пытался заменить устаревшие методы и типы IdentityServer, и, как меня предупредили, я попытался заменить DiscoveryClient() и TokenClient() подходящими методами, как в примерах последнего сервера идентификации docs .Когда я пытаюсь получить связанные конечные точки с помощью GetDiscoveryDocumentAsync, он возвращает значение NULL, хотя я мог прочитать эти значения с помощью текущего кода, а также получить эти значения в браузере.

Кроме того, когда я пропускаю этап обнаружения и предоставления конечной точки прямого токена RequestTokenAsync, возвращается ноль из-за исключения Not Found.

Для ясности вопроса я долженскажем, что я ничего не изменил (его настройки или конечные точки) в своем проекте Identity Server (из которого я пытаюсь получить токен доступа).

Ниже приведен мой предыдущий и обновленный код для достижения того, что я описал.Любая помощь или предложение приветствуется.Заранее спасибо.

Предыдущий код (рабочий):

        var testServer = new TestServer(builder);
        var client = testServer.CreateClient();
        client.BaseAddress = new Uri("http://localhost:5000");
        var discoClient = new DiscoveryClient(AuthorityUrl) {Policy = {RequireHttps = false}};
        var disco = discoClient.GetAsync().Result;
        var tokenClient = new TokenClient(disco.TokenEndpoint, ClientId, ClientSecret);
        var tokenResponse = tokenClient.RequestClientCredentialsAsync(Scope).Result;
        client.SetBearerToken(tokenResponse.AccessToken);

Обновленный код (не работает):

        var testServer = new TestServer(builder);
        var client = testServer.CreateClient();
        client.BaseAddress = new Uri("http://localhost:5000");
        //var discoClient = new DiscoveryClient(AuthorityUrl) {Policy = {RequireHttps = false}};
        var disco = client.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest()
        { Address = AuthorityUrl, Policy = new DiscoveryPolicy() { RequireHttps = false, Authority = AuthorityUrl} }).Result;
        ;
        if (disco.IsError)
        {
            throw new Exception(disco.Error);
        }
        //var tokenClient = new TokenClient(disco.TokenEndpoint, ClientId, ClientSecret);
        var tokenClient = client.RequestTokenAsync(new TokenRequest()
        { Address = disco.TokenEndpoint, ClientId = ClientId, ClientSecret = ClientSecret, GrantType = GrantType}).Result;
        //var tokenResponse = tokenClient.RequestClientCredentialsAsync(Scope).Result;
        client.SetBearerToken(tokenClient.AccessToken);
        return client;

Редактировать:

Обновил мой код, как показано ниже, и все еще получаю ту же ошибку.

        var testServer = new TestServer(builder);
        var client = testServer.CreateClient();
        client.BaseAddress = new Uri("http://localhost:5000");
        //var discoClient = new DiscoveryClient(AuthorityUrl) {Policy = {RequireHttps = false}};
        var disco = await client.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest()
            { Address = AuthorityUrl, Policy = new DiscoveryPolicy() { RequireHttps = false, Authority = AuthorityUrl } });
        ;
        if (disco.IsError)
        {
            throw new Exception(disco.Error);
        }
        //var tokenClient = new TokenClient(disco.TokenEndpoint, ClientId, ClientSecret);
        var tokenClient =await client.RequestTokenAsync(new ClientCredentialsTokenRequest()
            { Address = disco.TokenEndpoint, ClientId = ClientId, ClientSecret = ClientSecret, GrantType = GrantType , Scope = Scope});

        client.SetBearerToken(tokenClient.AccessToken);

        return client;

Ошибка:

"Ошибка подключения к AuthorityUrl /. Всем известная / openid-configuration: Not Found"

...