Настройка конечной точки IdentityServer4 и UserInfo - PullRequest
1 голос
/ 16 мая 2019

Я создал приложение IdentityServer4, и если я вхожу в него, то все заявления пользователя хороши. Если я вхожу в систему из другого клиентского приложения (MVC), конечная точка UserInfo не возвращает те же утверждения.

IdentityServer настроен с использованием ASP.NET Identity, поэтому профиль UserProfile уже настроен на возврат всех пользовательских утверждений, например, созданного мной.

Я не понимаю, почему он не отображается в представлении согласия или не включен в результат конечной точки UserInfo

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Пожалуйста, проверьте следующие пункты, могут ли они решить вашу проблему

1.) У вашего ресурса Identity и ресурса API должны быть требуемые UserClaims.

2.) Проверьте, есть ли некоторыепользовательская логика для выдачи запрошенных утверждений для конечной точки userinfo в службе вашего профиля.

public class ProfileService : IProfileService
{
    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        if (context.Caller == IdentityServerConstants.ProfileDataCallers.UserInfoEndpoint)
        { 
            //custom logic to add requested claims 
            context.AddRequestedClaims(claims);
        }
    }
}

3.) Попробуйте создать свойство 'GetClaimsFromUserInfoEndpoint = true' в вашей конфигурации MVC клиента AddOpenIdConnect.

1 голос
/ 17 мая 2019

настроили ли вы IdentityResources? Что-то вроде:

services.AddIdentityServer()

                .AddInMemoryIdentityResources(GetIdentityResources())

//where
public static List<IdentityResource> GetIdentityResources()
{
  // Claims automatically included in OpenId scope
  var openIdScope = new IdentityResources.OpenId();
  openIdScope.UserClaims.Add(JwtClaimTypes.Locale);

  // Available scopes
  return new List<IdentityResource>
  {
    openIdScope,
    new IdentityResources.Profile(),
    new IdentityResources.Email(),
    new IdentityResource(Constants.RolesScopeType, Constants.RolesScopeType,
      new List<string> {JwtClaimTypes.Role, Constants.TenantIdClaimType})
      {
        //when false (default), the user can deselect the scope on consent screen
        Required = true 
      }
  };
}
...