嘿,我刚刚编写了一个基于 token 的身份验证,如下 tutorial 。 因此,只要我将 POST 请求作为 x-www-form-urlencoded 发送,一切都会顺利。所以现在我的队友需要用json来获取 token ,但他得到的只是“不支持的grant_type”。那么我可以更改 token 的可接受类型还是必须寻找其他解决方案?
我的配置如下:
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
var myProvider = new MyAuthorizationServerProvider();
OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = myProvider
};
app.UseOAuthAuthorizationServer(options);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
}
}
最佳答案
使用 application/x-www-form-urlencoded 作为 Content-Type 的原因很简单:OAuth2 规范 (RFC 6749) 要求 token 请求使用此内容类型。
任何其他内容类型都会破坏 OAuth2 兼容的客户端兼容性。我建议您不要改变这个标准行为。
来自 Microsoft.Owin.Security.OAuth
的 OAuthAuthorizationServerMiddleware
(更准确地说是内部使用的 OAuthAuthorizationServerHandler
)的默认实现只是忽略 Content-Type
header 并尝试将请求正文作为表单读取。
另一种方式 ,在RequestBody中你可以写, grant_type=password&username=yourUserName&password=MyPassword123,
还要确保 grant_type=password&username=username&password=password 之后没有空格或换行符。
关于时间:2019-03-17 标签:c#asp.netWebAPIOwinJsonToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42504476/