2017-02-02 9 views
2

Я играл с IdentityServer4. Абсолютно люблю это.Что такое ProfileService/Когда выполняется ProfileService?

Я шел через учебники на вашем сайте, в частности https://identityserver4.readthedocs.io/en/release/quickstarts/7_javascript_client.html

Я создал службу профилей, который делает следующее:

public class ProfileService : IProfileService 
{ 
    public Task GetProfileDataAsync(ProfileDataRequestContext context) 
    { 
     context.IssuedClaims.Add(new Claim("test-claim", "test-value")); 
     return Task.FromResult(0); 
    } 

    public Task IsActiveAsync(IsActiveContext context) 
    { 
     context.IsActive = true; 

     return Task.FromResult(0); 
    } 
} 

Это прекрасно работает, мой обычай претензия видна в окно журнала моего JS-клиента.

Я поставил точку останова, чтобы проверить, что находится в контексте, и я заметил, что он дважды попадал в цель. Свойства вызывающего абонента были ClaimsProviderAccessToken и UserInfoEndpoint соответственно. Почему это?

В моей наивности я удалил profile сферы из моего Js клиента, и в РСИНЕ JS конфигурации также удаляется рамки профиля и установить loadUserInfo: false пока мой ProfileService он еще называется дважды.

Если моя конечная цель состоит в том, чтобы устанавливать претензии на основе параметров из базы данных, я действительно не хочу делать эту операцию дважды, не так ли? (Подлинный вопрос - я не знаю). «Решение» должно было только установить их на «ClaimsProviderAccessToken», но есть что-то, говорящее мне о том, что будет вызвана причина, по которой ProfileServices вызывается дважды, и что существует некоторая важность того, что она устанавливает требования на обоих проходах.

P.s. Я думаю, что есть опечатка здесь https://github.com/IdentityServer/IdentityServer4/blob/dev/docs/quickstarts/8_entity_framework.rst Должно ли это не быть «Microsoft.EntityFrameworkCore.Tools.DotNet» в разделе tools? а не «Microsoft.EntityFrameworkCore.Tools». Мне было неуместно создавать новую проблему для чего-то такого тривиального, а не обязательно неправильно!

+0

'Microsoft.EntityFrameworkCore.Tools.DotNet' - это только, если вы хотите, чтобы команды были доступны с помощью команды dotnet, то есть« обновление базы данных dotnet ef ». 'Microsoft.EntityFrameworkCore.Tools' доступен и доступен, но доступен только в консоли диспетчера пакетов (команды Powershell, такие как« Migration-Add »или« Database-Update », как это было в предыдущих версиях EF, например EF6). Также см. Http://github.com/aspnet/Announcements/issues/208 – Tseng

ответ

5

Служба профиля вызывается всякий раз, когда IdentityServer должен возвращать требования о пользователе к клиентским приложениям.

Если вы запрашиваете идентификатор и токен доступа - он будет вызываться дважды (поскольку вы можете помещать разные требования в каждый тип токена).