thinktecture身份服务器3身份验证在iis express中正常工作,但在iis中托管时仍然保持401未经授权

时间:2015-02-08 15:16:58

标签: thinktecture-ident-server thinktecture

好的,所以我尝试在iis上托管最简单的oauth示例和身份服务器,我在最简单的oauth示例上启用了cors。因此,当我使用javascript隐式客户端测试api时,在iis express上它完美地工作,它获取令牌,然后当发送令牌时,web api检查令牌并授权javascript客户端。问题发生在我移动javascript imlicit客户端,身份服务器和简单誓言web api托管在iis上时,javascript正确地恢复了令牌,但是当令牌被发送到web api时,它总是返回401未经授权。那么有什么配置我必须添加才能在iis上运行它。我确保匿名身份验证是唯一的身份验证模式。任何帮助或指针都非常感激。

我正在尝试实现iis上提供的样本。谢谢你的帮助

1 个答案:

答案 0 :(得分: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

收到令牌后,请确保将其插入授权标题..

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
        });

确定正在发生的事情的最佳方法是启用日志记录。