0

わかりましたので、最も単純な oauth サンプルと ID サーバーの両方を iis でホストしてみました。最も単純な oauth サンプルで cors を有効にしました。そのため、JavaScript 暗黙的クライアントを使用して API をテストすると、iis Express で問題なく動作し、トークンを取得し、トークンが送信されると、Web API がトークンをチェックして JavaScript クライアントを承認します。この問題は、JavaScript の暗黙のクライアント、ID サーバー、およびシンプルな誓いの Web API が iis でホストされている場合に発生します。JavaScript はトークンを正しく返しますが、トークンが Web API に送信されると、常に 401 を返します。iisで実行するために追加する必要がある構成はありますか。匿名認証が唯一の有効な認証モードであることを確認しました。ヘルプやポインタは深く感謝しています。

iis で提供されているサンプルを実装しようとしています。助けてくれてありがとう

4

1 に答える 1

1

同じ問題がありました。それは私の自己署名証明書から来ていました。

IdentityServerOptions に追加してみてください

RequireSsl = false

そして WebApi Authority を http を使用するように切り替えます。

編集

サーバー側の構成

   public void ConfigureIdentityServer(IAppBuilder app)
        {
            //Configure logging
            LogProvider.SetCurrentLogProvider(new DiagnosticsTraceLogProvider());
            //This is using a Factory Class that generates the client, user & scopes. Can be seen using the exmaples
            var IdentityFactory = Factory.Configure("DefaultConnection");

            app.Map("/identity", idsrvApp =>
            {
                idsrvApp.UseIdentityServer(new IdentityServerOptions
                {
                    SiteName = "Security Proof of Concept",
                    SigningCertificate = LoadCertificate(),
                    Factory = IdentityFactory,
                    CorsPolicy = CorsPolicy.AllowAll,
                    RequireSsl = false
                });
            });
        }

JavaScript

トークンを受け取ったら、Authorization ヘッダーに挿入されていることを確認してください。

JQuery の例

    $.ajax({
    url: 'http://your.url',
    type: GET,     
    beforeSend: function (xhr) {
                  xhr.withCredentials = true;
                  xhr.setRequestHeader("Authorization", " Bearer " + apiToken);
              }
});

WebApi リソース

  app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            //Location of identity server make full url & port
            Authority = "http://localhost/identity",
            RequiredScopes = new[] { "WebApiResource" }
            //Determines if the Api Pings the Identity Server for validation or will decrypt token by it's self 
            //ValidationMode = ValidationMode.Local
        });

何が起こっているかを判断する最善の方法は、ログを有効にすることです。

于 2015-02-23T23:23:00.670 に答える