Используя AspNet 4.6.2 для генерации токенов доступа, используя любой поток аутентификации (пробовал Поток кода, Неявный поток, Поток учетных данных клиента), используя класс AuthenticationTokenCreateContext
из Microsoft.Owin.Security.Infrastructure
, я наблюдал странное поведение.
Мы внедрили сервер аутентификации, где ресурсы позволяют клиентам запрашивать определенные области, однако токен всегда возвращается со всеми областями, которые клиент может запросить у этого ресурса.
Соответствующийкод:
var accessTicket = new AuthenticationTicket(new ClaimsIdentity(identity), new AuthenticationProperties());
accessTicket.Properties.SetTicketType("access_token");
accessTicket.Properties.IssuedUtc = nowUtc;
accessTicket.Properties.SetNotBeforeUtc(nowUtc);
accessTicket.Properties.ExpiresUtc = nowUtc.Add(Options.AccessTokenLifetime);
accessTicket.Properties.SetClientId(clientId);
accessTicket.Properties.SetResource(resource);
accessTicket.Properties.SetTokenId(Guid.NewGuid().ToString());
accessTicket.Properties.SetScope(scope);
var accessTokenCreateContext = new AuthenticationTokenCreateContext(Context, Options.AccessTokenFormat, accessTicket);
await Options.AccessTokenProvider.CreateAsync(accessTokenCreateContext);
var accessToken = accessTokenCreateContext.Token;
if (string.IsNullOrEmpty(accessToken))
{
accessToken = accessTokenCreateContext.SerializeTicket();
}
После создания accessTokenCreateContext.Ticket.Properties.GetScope()
возвращает ожидаемую область, но затем, когда (JWT) accessToken создается с помощью метода SerializeTicket()
, токен имеет все области, которые клиентможет запросить у ресурса.
Почему этот метод сериализует заявку с областями, которых нет в заявке?