2017-09-24 16 views
1

純粋なコードでのアクセスを要求するためにIdentityServer4の最も単純な例を取得しようとしています。クライアントの要求を使用したとき、私はアクセストークンを取得することができますが...ユーザのログインをしていないときIdentityServer4 unsupported_grant_typeエラー

var discos = new DiscoveryClient(authority); 
     var disco = await discos.GetAsync(); 

     if (disco.IsError) 
     { 
      Console.WriteLine(disco.Error); 
      return null; 
     } 

     var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret"); 

     var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("username", "password", "api1"); 

これは、ユーザーの詳細を使用して要求を行うクライアントです。 は、私は、サーバーのようにそれの設定がある。..

を永久unsupported_grant_typeを得る:

new Client 
      { 
       ClientId = "ro.client", 
       AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, 

       ClientSecrets = 
       { 
        new Secret("secret".Sha256()) 
       }, 
       AllowedScopes = { "api1" } 
      } 

誰がどのようなイムmisingを識別してくださいすることができます。ユーザーは、ソフトウェアが提供するフロントエンドのクイックスタートUIを使用してログインすることができます。これは機能に組み込まれています。会社が有効な場合、なぜ機能しないのでしょうか。

+1

あなたはメモリ内のユーザー使用していますか? –

+1

ログをチェック... – leastprivilege

答えて

0

の「秘密」のSHA256を渡すためにあなたのtokenClientを更新します。 新しいバージョンのNugetパッケージを使用してこれを動作させることができたので、私が読んでいたものと古い要件との競合があったかもしれません。参照のために

私はgithubのにサーバー、APIとコンソールクライアントでの作業のデモをアップロードしています https://github.com/PheonixProject/IdentityServer4Demo

1

ClientSecretsは、リテラル文字列 "secret"ではなく "secret"のSha256用に設定されています。

代わりに文字列リテラル「秘密」今すぐに解決

var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret".Sha256());