好的,所以我尝试在iis上托管最简单的oauth示例和身份服务器,我在最简单的oauth示例上启用了cors。因此,当我使用javascript隐式客户端测试api时,在iis express上它完美地工作,它获取令牌,然后当发送令牌时,web api检查令牌并授权javascript客户端。问题发生在我移动javascript imlicit客户端,身份服务器和简单誓言web api托管在iis上时,javascript正确地恢复了令牌,但是当令牌被发送到web api时,它总是返回401未经授权。那么有什么配置我必须添加才能在iis上运行它。我确保匿名身份验证是唯一的身份验证模式。任何帮助或指针都非常感激。
我正在尝试实现iis上提供的样本。谢谢你的帮助
答案 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
});
确定正在发生的事情的最佳方法是启用日志记录。