2017-02-10 44 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()來引用它們。問題是我目前得到的是'unauthorised_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。

相關問題