如何使用身份验证过滤器将标头设置为令牌请求 OAuth?
Posted
技术标签:
【中文标题】如何使用身份验证过滤器将标头设置为令牌请求 OAuth?【英文标题】:How to set header as token request OAuth by using authentication filter? 【发布时间】:2017-04-28 14:39:22 【问题描述】:我正在开发一个基于 OAuth 的 Web API 应用程序。 如何使用身份验证过滤器将标头设置为我从 OAuth 请求中收到的令牌?
参考链接: Setting Authorization Header of HttpClient
我正在尝试检查所有类型的方法,但它对我不起作用:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");
context.Request.Headers.Add("Bearer", "Your Oauth token");
我的API调用源码是:
[BasicAuthenticator]
[HttpGet]
[Authorize]
public IEnumerable<string> Get()
return new string[] "value1", "value2" ;
我收到了回复:
"Message":"此请求的授权已被拒绝。"
我的令牌生成代码如下:
public class BasicAuthenticator : Attribute, IAuthenticationFilter
public bool AllowMultiple get; set;
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
var req = context.Request;
var reqHeader = context.Request.Headers;
if (!reqHeader.Contains("Authorization"))
var pairs = new List<KeyValuePair<string, string>>
new KeyValuePair<string, string>( "grant_type", "password" ),
new KeyValuePair<string, string>( "username", "xxxx" ),
new KeyValuePair<string, string> ( "Password", "xxxx" )
;
var content = new FormUrlEncodedContent(pairs);
var client1 = new HttpClient();
var response = client1.PostAsync("http://localhost:56672/" + "Token", content).Result;
var responseBody = response.Content.ReadAsStringAsync();
var obj = JObject.Parse(responseBody.Result);
var tokenVal = (string)obj["access_token"];
client1.DefaultRequestHeaders.Clear();
client1.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenVal);
return Task.FromResult(0);
【问题讨论】:
看这里:***.com/questions/38661090/… 您在哪里生成令牌?在服务器属性 BasicAuthenticator?客户端必须发送令牌才能进行身份验证。检查我之前评论中的链接。 【参考方案1】:您需要在 API 上定义 Active auth 方案。尝试将[Authorize]
替换为[Authorize(ActiveAuthenticationSchemes = "Bearer")]
。
【讨论】:
ActiveAuthenticationSchemes 缺少程序集参考?以上是关于如何使用身份验证过滤器将标头设置为令牌请求 OAuth?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Alamofire 的 RequestAdapter 将 firebase ID 令牌设置为全局标头?
使用 Angular 和 spring 进行 Jwt 身份验证
在 ember-file-upload 的请求标头中添加身份验证令牌
如果用于身份验证的 JWT 令牌保存在 HTTP-Only cookie 中,您如何从 cookie 中读取它以便我可以将其包含在请求标头中?