2017-02-10 14 views
0

Я пытался использовать код, указанный здесь:Проблема с вызовом пользовательской функции для аутентификации в Identityserver 4

https://stackoverflow.com/a/35882775/7440281

... как способ решения своих собственных проблем. В основном все, что я хочу сделать - изначально в любом случае, - это вызов какой-либо функции и предоставление ей имени пользователя и пароля. Проверка была сделана извне, но была добавлена ​​в мой экземпляр ResourceOwnerPasswordValidator. Обратите внимание, что интерфейс, похоже, изменился между тем, когда это было написано и по сей день. Все, что я делаю в качестве первого шага, - это проверка того или иного имени, чтобы попытаться свести все с самого начала. Это текущее содержание моего класса:

public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator 
{ 
    public Task ValidateAsync(ResourceOwnerPasswordValidationContext context) 
    { 
     if (context.UserName == "PatrickS") 
     { 
      var result = new GrantValidationResult("PatrickS", "password"); 
     } 
     else 
     { 
      var result = new GrantValidationResult(TokenRequestErrors.UnauthorizedClient, "Username Or Password Incorrect"); 
     } 
     return Task.FromResult(result); 
    } 
} 

У меня есть оба интерфейса, упомянутые в комментарии, указанном в комментарии. Я упомянул их в ConfigureServices, используя services.AddTransient() тоже. Проблема в том, что все, что я сейчас получаю, это «unauthorized_client».

Это может быть или не соответствовать конфигурации Клиента. Это от настроек клиента в вопросе:

AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, 
RedirectUris = { "http://localhost:5002/signin-oidc" }, 
PostLogoutRedirectUris = { "http://localhost:5002" }, 

RedirectUris был установлен ранее в рамках одного за быстрые настройку учебников. Я предполагаю, что это должно быть изменено на что-то еще, но не ясно, что это должно быть. Я также не знаю, правильно ли установлен AllowedGrantTypes. Конечно, могут быть и другие вещи, но я все еще новичок в Identityserver.

ответ

0

Да, проблема, несомненно, связана с определением вашего клиента или способом, которым вы вызываете конечную точку connect/token. в сообщении к connect/token конечной убедитесь, что вы предоставить: - grant_type («пароль» в вашем случае) - client_id - имя пользователя - пароль - область - секрет (если требует, чтобы в вашем определении клиента

В вашем IdentityServer, где вы определяете ваши клиенты, убедитесь, что client_id вы используете определенные:

  • AllowedGrantTypes (что Сопоставьте grant_type испрашивается)
  • RequireClientSecret (истина/ложь, и если это правда, то вам нужно разместить его) и определить их ClientSecrets
  • AllowedScopes (в соответствии объем запрошенной)

Как вы тестирование конечной точки IdServer? Почтальон - полезный инструмент для простого хранения и устранения любых потенциальных проблем с самим клиентом.

Если вы используете GrantType.ResourceOwnerPassword, то вам не нужно (и не использовать) URL-адреса переадресации.