当与请求一起发送时,查询字符串参数是否在HTTPS中加密?
我已使用OWIN成功将OAuth添加到我的WebAPI 2项目中.我收到令牌,可以在HTTP Header中使用它们来访问资源.
现在,我想在其他通道上使用这些令牌进行身份验证,而不是为OWIN模板制作的标准HTTP请求.例如,我正在使用WebSockets,其中客户端必须发送OAuth承载令牌进行身份验证.
在服务器端,我通过WebSocket接收令牌.但是,我现在如何将此令牌放入OWIN管道以从中提取IPrincipal和ClientIdentifier?在WebApi 2模板中,所有这些都是为我抽象的,因此我无需做任何事情来使其工作.
所以,基本上,我将令牌作为字符串,并希望使用OWIN来访问该令牌中编码的用户信息.
提前感谢您的帮助.
我正在开发AngularJS,Web API,SignalR应用程序的原型,作为VS 2013中新项目的潜在起点.
在这个阶段,我几乎使用visual studio为个人用户帐户生成的预制代码.
StartUp.Auth.cs代码中有一行看起来像这样.
app.UseOAuthBearerTokens(OAuthOptions);
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以将[Authorize]属性添加到控制器,它工作正常.
顺便说一句,使用angular我可以在JavaScript中添加包含令牌的标准头,如下所示.
$http.defaults.headers.common.Authorization = 'bearer ' + access_token;
Run Code Online (Sandbox Code Playgroud)
然后我将SignalR添加到项目中.
它支持自己的[Authorize]属性版本,但在使用SignalR时无法传递自定义标头.
这是浏览器方面的限制.
文档说您可以将令牌作为查询字符串的一部分传递.
我在JavaScript方面添加了该代码.我的SignalR代码现在包含了这个.
我将令牌传递为'bearer_token'.
this.connection = $.hubConnection("/TestHub", { useDefaultPath: false, qs: "bearer_token=" + token });
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使OWIN识别令牌现在它不再在标题中.
经过多次搜索后,我最终添加了将令牌从查询字符串移动到标题中的代码.
对于我的原型,我刚刚在StartUp.Auth.cs的原始行上面添加了一些代码.
所以,现在它看起来像这样:
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
Provider = new OAuthBearerAuthenticationProvider()
{
OnRequestToken = context =>
{
if (context.Request.Path.Value.StartsWith("/TestHub"))
{
string bearerToken = context.Request.Query.Get("bearer_token");
if (bearerToken != null)
{
string[] authorization = new string[] { "bearer " + bearerToken };
context.Request.Headers.Add("Authorization", authorization);
}
}
return Task.FromResult(context);
}
} …Run Code Online (Sandbox Code Playgroud)