2016-08-08 6 views
0

私はIdentityServer MVC walkthrough in the documentationを使用しています。パート2でMVCアプリケーションから別のAPIを呼び出すまでは素晴らしいです。私のよう IDX10803: Unable to create to obtain configuration from: 'http://localhost:44300/identity/.well-known/openid-configuration'.callapi/clientcredentialsを呼び出すときにIdentityServer MVCウォークスルーでブラウザがハングアップする

:ここでは、ブラウザは、最終的にタスクをキャンセルエラーでタイムアウトし、VSのデバッガが内部例外とapp.UseIdentityServerBearerTokenAuthentication(...)でのAPIのスタートアップクラスの無効演算例外をスローするまで/ callApi/ClientCredentialsへの呼び出しでハングすべてが今までのウォークスルーですごくうまくいっていたと言いました。ディスカバリ文書は、ブラウザからそのアドレスから問題なく取得できます(SSLエラーなし - サイト証明書は信頼されています)。

これはhereと似ていますが、この構成では、identityserverとアクセストークンの検証ミドルウェアが別々のプロセス(iis expressとmy accountの両方で実行されているため)で異なるためです。とにかくDelayLoadMetadataを設定しようとしましたが、ブラウザはタスクキャンセル例外を返し、Visual Studioは例外をスローしません。

ログを追加しても問題は見られませんでした。つまり、MVCクライアントがアクセストークンを取得していることを示しています。

また、すべてのアプリケーションとSSLポートを「実際の」ホスト名と証明書を使用するように再設定したので、Fiddler経由ですべてを見ることができました。それはウォークスルー全体(そして前のものも)にはうまくいきましたが、この時点でまだまだ立ち往生しています。私は、発見のドキュメントを照会するAPIアプリケーションを参照して、それは決して応答を取得します。

私には何が欠けていますか?

+0

単純なコンソールアプリケーションを作成し、ディスカバリエンドポイントに対してpingを実行し、それをmvcクライアントを実行しているサーバで実行するとします。何が起こるのですか?同じ? –

+0

SSL検証を無効にすると、何が起こりますか? 両方のアプリケーションで、global.asaxまたはstartup.csに入れてください。 ServicePointManager。ServerCertificateValidationCallback = delegate {trueを返します。 }; –

+0

まだコンソールアプリケーションを試していませんが、mvcクライアントがapiの応答を待っている間に、ブラウザからディスカバリドキュメントを取得できます。 SSL検証に関して、私は過去に信頼されていないエラーを受け取りました(そしてそれらを修正しました)。 –

答えて

1

私のところは簡単な間違いです。 apiのStartupクラスでIdentityServerBearerTokenAuthenticationOptions Authorityプロパティを初期化したときに、URLの前に間違ってhttps://ではなくhttp://が付いていました。したがって、SSL証明書とポートが動作していたにもかかわらず、apiはhttpを使用してIDサーバーに接続しようとしていましたが、コンピュータには何も接続されていません。http://localhost:44300。私はそれを固定したとき

Authority = "https://localhost:44300/identity", 
// added the "s"-^ 

それはチャンピオンのように働いた。私はこれを逃して自分自身を蹴っている。ストーリーの道徳:ポート、パス、証明書、プロトコルがすべて正しいことを確認してください。

0

Identity Server 3を使用している場合は、クライアントとユーザーのためにIdentityデータベースのサーバーに18の表が必要です。ですから、データベースのテーブルを見ることができれば、すべてうまくいきます。私はこのクライアントのResourceOwnerフローを使用しています

public void Configuration(IAppBuilder app) 
     { 
      // Any connection or hub wire up and configuration should go here 
      var clientId = (string)ConfigurationManager.AppSettings["oauth2.clientid"]; 
      var authority = (string)ConfigurationManager.AppSettings["oauth2.authority"]; 

      app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
      { 
       Authority = authority, 
       ValidationMode = ValidationMode.ValidationEndpoint, 
       RequiredScopes = new[] { clientId }, 
      }); 

      app.UseResourceAuthorization(new AuthorizationManager()); 

      var config = new HubConfiguration(); 

      config.EnableJSONP = true; 
      app.MapSignalR(config);  


     } 


     private void ConfigureOAuth() 
     { 
      var formatters = GlobalConfiguration.Configuration.Formatters; 
      var jsonFormatter = formatters.JsonFormatter; 
      var settings = jsonFormatter.SerializerSettings; 
      settings.Formatting = Formatting.Indented; 
     } 


public class RequireHttpsAttribute : AuthorizationFilterAttribute 
    { 

     public override void OnAuthorization(HttpActionContext actionContext) 
     { 
      base.OnAuthorization(actionContext); 

      var request = actionContext.Request; 
      if (request.RequestUri.Scheme != Uri.UriSchemeHttps) 
      { 

       actionContext.Response.Content = new StringContent("<p>https scheme required.</p>", Encoding.UTF8, "text/html"); 

       if (string.Compare(request.Method.Method, "GET", true) == 0) 
       { 
        actionContext.Response = request.CreateResponse(HttpStatusCode.Found); 

        var builder = new UriBuilder(request.RequestUri); 
        builder.Scheme = Uri.UriSchemeHttps; 
        builder.Port = 443; 

        actionContext.Response.Headers.Location = builder.Uri; 
       } 
       else 
       { 
        actionContext.Response = request.CreateResponse(HttpStatusCode.NotFound); 

       } 
      } 
     } 
    } 

は、今すぐあなたのリソースサーバーでは、トークンプロバイダーを設定するための設定と検証と起動クラスでなければなりません。私の最後の勧告は次のものです:Skypeはポート443を使用していますが、これは奇妙なことかもしれませんが、まだ失敗した場合は、IdentityServerポートを44305に変更するか、44300または443と異なるものを変更してください。君おかしいよ。

希望します。

+0

テーブル?私はクライアント、ユーザー、スコープのInMemoryリストを使用するドキュメンテーションのウォークスルーを行っています。また、Startupクラスは、ウォークスルーに示されているクラスと一致します。そして、私はアクセストークンを取得しているウォークスルーの最初の部分で、ポートは正常に動作します。 –

関連する問題