Я пытался заменить устаревшие методы и типы 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"