2016-09-16 12 views
1

IISで実行されているIdentityServer3のインスタンスをセットアップしました。IdentityServer3 PostMan invalid_client

 var validators = new List<Registration<ISecretValidator>> 
     { 
      new Registration<ISecretValidator, HashedSharedSecretValidator>(), 
      new Registration<ISecretValidator, X509CertificateThumbprintSecretValidator>() 
     }; 

     // .Register() is an extension method that setups that setups the 
     // IdentityServerServiceFactory 
     var factory = new EntityFrameworkServiceOptions() 
        .Register() 
        .UseInMemoryUsers(Users.Get()); 
     factory.SecretValidators = validators; 

     app.Map($"/{IdentityServer.Path}", server => 
     { 
      server.UseIdentityServer(new IdentityServerOptions() 
      { 
       RequireSsl = false, 
       SiteName = siteName, 
       SigningCertificate = Certificate.Load(), 
       Factory = factory, 

       // Currently does nothing. There are no plugins. 
       PluginConfiguration = ConfigurePlugins, 
       AuthenticationOptions = new AuthenticationOptions() 
       { 
        EnablePostSignOutAutoRedirect = true, 

        // Currently does nothing. There are no IdentityProviders setup 
        IdentityProviders = ConfigureIdentityProviders 
       } 
      }); 
     }); 

クライアント証明書フローのEFデータベースにクライアントをセットアップしました。したがって、Clientテーブルにクライアントがあり、ClientScopesテーブルのスコープへのクライアントアクセスを許可しました。そして、クライアントにClientSecretsテーブルの秘密を与えました。

データベースに格納されている適切な値は、(記載されていないすべての値がIdentityServer3のデフォルトです)、次のとおりです。

ClientId = 'client' 
Flow = 'ClientCredentials [3]' 
ClientScope = 'api' 
ClientSecret = 'secret'.Sha256() 

私はポストマンから新しいトークンを取得しようとしている:enter image description here

enter image description here

IdentityServerがテストサーバー上で実行されているため、「ローカルにアクセストークンを要求する」が選択されていません。

私は「リクエストトークン」をクリックすると、私は次のエラーが記録され得る:

2016-09-16 16:18:28.470 -05:00 [Debug] Start client validation 
2016-09-16 16:18:28.470 -05:00 [Debug] Start parsing Basic Authentication secret 
2016-09-16 16:18:28.470 -05:00 [Debug] Parser found secret: "BasicAuthenticationSecretParser" 
w3wp.exe Information: 0 : 2016-09-16 16:18:28.470 -05:00 [Information] Secret id found: "client" 
2016-09-16 16:18:28.470 -05:00 [Debug] No matching hashed secret found. 
w3wp.exe Information: 0 : 2016-09-16 16:18:28.470 -05:00 [Information] Secret validators could not validate secret 
w3wp.exe Information: 0 : 2016-09-16 16:18:28.470 -05:00 [Information] Client validation failed. 
w3wp.exe Information: 0 : 2016-09-16 16:18:28.470 -05:00 [Information] End token request 
w3wp.exe Information: 0 : 2016-09-16 16:18:28.470 -05:00 [Information] Returning error: invalid_client 

私はバリの秘密を検証することができない理由は本当にわかりません。 Sha256とIdentityServerがSha256を解析して検証できるように、データベースに保存されます。

UPDATE: 私はそれがポストマンからのPOSTを行うと、適切なx-www-form-urlencodedでフィールドを記入動作するようになったが、私はまだそれが認証を使用して動作するように取得する方法を考え出したていませんタブと「郵便配達員の新しいアクセストークンの取得」機能を使用します。 IdentityServer3からアクセストークンを取得するために使用することはできませんか?

答えて

0

郵便配達員の「新しいアクセストークンの取得」機能を使用していません。私はそれが動作していない理由を理解できませんでした:p代わりに、私はアクセストークンを与えたトークンURLに投稿しました。その後、私のサービスへのその後の呼び出しでそれを使用することができました。

POSTます。https:// {{サーバー}} /接続/トークン CLIENT_ID: client_secret: grant_type:client_credentials 範囲:

そしてサーバー呼び出しでそれを使用するあなたのヘッダに以下を追加:

認証:無記名[access_tokenは]

2

ポストマンが正常に動作に組み込まれたのOAuth2トークンのサポート。いずれかのクライアントを使用できます。クライアント資格情報と認可コード認可タイプの両方がうまくいきます。下に示したように認可コードタイプを設定すると、ユーザー名とパスワードを入力できるポップアップが表示されます。ここで私は認証コードの流れのために使用していたクライアントのエントリは次のとおりです。

new Client 
{ 
    ClientId = "postmantestclient", 
    ClientName = "Postman http test client", 
    Flow = Flows.AuthorizationCode, 
    AllowAccessToAllScopes = true, 
    IdentityTokenLifetime = 60 * 60 * 24, 
    AccessTokenLifetime = 60 * 60 * 24, 
    RequireConsent = false, 
    ClientSecrets = new List<Secret> 
    { 
     new Secret("PostmanSecret".Sha256()) 
    }, 
    RedirectUris = new List<string>() 
    { 
     "https://www.getpostman.com/oauth2/callback" 
    } 
} 

そして、ここでは、私はセットアップにポストマン

からの要求

Get New Access Token Popup in Postman Desktop

ないダイアログ内のURLをしました方法です。システムはあまり許されていません。あなたがURLを間違えた場合、あなたがリクエストをしたときにCORSのエラーが発生する可能性があります。

+0

私はクライアントのリダイレクトurisにコールバックURLを追加しました。トークン名を「ベアラ」に更新しました。 Auth URLを承認エンドポイントに変更しました。 (私の付与タイプは依然としてクライアント証明書です)。私はRequest accessトークンをローカルチェックボックスにチェックして、このメソッドを使って "invalid_client"を取得します...クライアントは "Authorization Code"フローでセットアップする必要がありますか? –

+0

クライアントクレデンシャルとリソースコードを使用して動作させていただきました。唯一の違いはリソースコードです。Postmanはログインダイアログをポップアップします。これは、多くのRESTサービス呼び出しを特定のユーザーに関連付ける必要があるため、私が働いている開発に便利です。 – GlennSills

関連する問題