Мой вывод заключается в том, что я каким-то образом не могу получить правильный токен, используя свой код (и не могу понять это из-за невежества), или что я получаю токен, в котором что-то отсутствует.
Исходя из ваших кодов, вы защищаете API с помощью Client Credentials , поэтому, во-первых, следуйте подробным инструкциям в статье для настройки сервера идентификации, веб-API и клиентов.
Для тестирования я следую инструкциям в этой статье и использую те же коды, которые вы указали, для получения токена:
// discover endpoints from metadata
var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return;
}
// request token
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");
if (tokenResponse.IsError)
{
Console.WriteLine(tokenResponse.Error);
return;
}
Console.WriteLine(tokenResponse.Json);
Console.WriteLine("\n\n");
'http://localhost:5000' - это конечная точка хоста сервера идентификации, а Clinet / Secret - это учетные данные моего клиента:
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",
// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ClientCredentials,
// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},
// scopes that client has access to
AllowedScopes = { "api1" }
}
};
}
Используйте этот токен для доступа к веб-API в Почтальоне:
Вы также можете сравнить запрос токена получения при использовании мастера на основе OAuth 2.0 и подтвердить, что вы используете поток учетных данных клиента.