Я прочитал в учебнике IDS4 , что следующий способ является способом получения токена.
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");
if (tokenResponse.IsError) { ... }
Console.WriteLine(tokenResponse.Json);
Однако в значении intellisense указано, что он будет объявлен устаревшимпоэтому я проверил документы для идентификационной модели тип предоставления пароля , предлагая следующее.
var response = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
Address = "https://localhost:44300/connect/token",
ClientId = "spa",
ClientSecret = "spa_secret",
Scope = "MemberApi",
UserName = user,
Password = pass
});
Я не уверен, что делать дальше с точки зрения создания токена.В объекте, который я получаю, есть AccessToken , IdentityToken , RefreshToken и т. Д., И я не понимаю, на что можно полагаться в качестве документации поразличия между ними неясны.
Поскольку сейчас идет вызов, я получаю сообщение об ошибке, в котором говорится, что клиент не авторизован и токены null .Клиент объявлен следующим образом.
new Client
{
ClientId = "spa",
ClientSecrets = { new Secret("spa_secret".Sha256()) },
ClientName = "SPA client",
ClientUri = "http://identityserver.io",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
RedirectUris = { "http://localhost:5000/security/credentials" },
PostLogoutRedirectUris = { "http://localhost:5000/index.html" },
AllowedCorsOrigins = { "http://localhost:5000", "https://localhost:44300" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"MemberApi",
"MemberApi.full",
"MemberApi.limited"
}
}