我有一个简单的(仅用于故障排除)实现OAuthAuthorizationServerProvider
,我在哪里覆盖这样的GrantResourceOwnerCredentials
方法:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
context.SetError("invalid_grant", "The user name or password is incorrect.");
}
第一行启用 CORS,第二行简单地使上下文无效。使用 Chrome 进行测试时,这可以按预期工作 -当我 POST 到令牌端点时,我得到了400(错误请求) 。
但是,当我引入对 的任何引用时System.Web.Helpers.Crypto
,CORS 不再起作用,并且我返回请求的资源上不存在“Access-Control-Allow-Origin”标头。 例如,如果我将上面的内容更改为此,CORS 会失败:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var salt = System.Web.Helpers.Crypto.GenerateSalt();
context.SetError("invalid_grant", "The user name or password is incorrect.");
}
当然,这是我在解决问题时想出的一个人为的例子。在实际的 GrantResourceOwnerCredentials 中,使用 Crypto.VerifyHashedPassword() 会导致完全相同的问题。此外,作为测试,我很快将对 Crypto 的调用封装在另一个类中,但问题仍然存在。
我遇到了一个奇怪的错误吗?任何与此有关的方向将不胜感激。
更新:进一步调查显示,这个问题显然发生在对 System.Web.Helpers 的任何引用。换句话说,它并不特定于 System.Web.Helpers.Crypto 类。