У меня есть клиентское приложение ASP.Net MVC, проект API.Net Web API 2 и сервер удостоверений 4. Я хочу защитить свои API от несанкционированного доступа и, следовательно, получить токен JWT от IS4, а затем передать заголовок как Bearerтокен при совершении звонка в API.Все это прекрасно работает (войдите в приложение, получите токен JWT, а затем перейдите к API, чтобы он вызывался после авторизации токена).Я использую версию IdentityModel 3.9.0 для взаимодействия с конечными точками сервера Identity 4.
Я пытаюсь получить токен обновления с сервера удостоверений 4 и в этом проблема.Я не могу получить его, вызвав конечную точку авторизации.Я запутался там.Ниже приведен мой метод ISC GetClients в файле конфигурации
. Я использовал HybridAndClientCredentials, а затем обнаружил, что поток токенов обновления не поддерживается с помощью учетных данных клиента.
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
AccessTokenLifetime = 1800,
AllowOfflineAccess = true,
// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},
// scopes that client has access to
AllowedScopes = { "nidhiapi", "offline_access" }
}
};
Я только что создал базовую консольприложение для проверки моего сервера аутентификации и ниже код в основном методе
var discoveryClient = await DiscoveryClient.GetAsync("http://localhost:5000/");
if (discoveryClient.IsError)
{
Console.WriteLine(discoveryClient.Error);
return;
}
// request the token from the Auth server
var tokenClient = new TokenClient(discoveryClient.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("nidhiapi");
Я могу получить AccessToken в переменной tokenResponse с определенным клиентом и потоком HybridClientCredentials
Как я хотел быполучить RefreshToken от Авторизовать конечную точку.Я попытался выполнить следующие изменения в моем клиентском коде с помощью того же метода GetClients
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("offline_access");
, используя приведенную выше строку кода, и я получил ошибку "Invalid_Scope".Я прочитал об этом и обнаружил, что нам нужно использовать offline_access для получения токена обновления
Кроме того, у меня есть еще один вопрос.Когда я пытался найти решение для этого, я думал о создании tokenClient с использованием AuthorizeEndPoint, но если я не проверю свои учетные данные клиента, приведенный ниже оператор бесполезен.
еще одна вещь: каким я должен бытьпередавая метод RequestRefreshToken, поскольку он ожидает токен
var authTokenClient = new TokenClient(discoveryClient.AuthorizeEndpoint, "client", "secret");
var refreshTokenResponse = await tokenClient.RequestRefreshTokenAsync("offline_access");
Затем я попытался изменить свой метод GetClients, чтобы использовать только гибридный поток, а не HybridClientCredentials, поскольку я также прочитал, что поток RefreshToken недоступен для ClientCredentials.
На самом деле, я сейчас растерялся.Мое требование - получить токен от IS4, а затем обновить его, используя токен обновления, чтобы клиентское приложение MVC не могло войти в систему по истечении срока действия
Предложение / решение, пожалуйста?