问题
给定一个 HttpRequest
用 Authorization
header ,获取所述 header 的身份验证类型和身份验证凭据的最简单方法是什么?
例如,给定Authorization: Bearer YWxhZGRpbjpvcGVuc2VzYW1l
, 我怎样才能同时获得 Bearer
和 YWxhZGRpbjpvcGVuc2VzYW1l
来自 HttpRequest
?
是的,我知道存在身份框架。我不在这里使用它。如果你真的想尝试改变我的想法,我们可以讨论它 in chat .
我尝试了什么
我正在按照以下方式编写一个函数:
var authorizationHeader = request.Headers["Authorization"].ToArray()[0];
var authorizationParts = authorizationHeader.Split(' ');
if (authorizationParts.Length == 2 && authorizationParts[0] == "Bearer")
{
var tokenValue = authorizationParts[1];
// ...
}
// ...
但它非常容易出错且冗长。例如,在第一行中,我没有检查数组是否至少包含一个元素。
最佳答案
这里有一些简单的中间件可以做到这一点:
app.Use(async (context, next) =>
{
if (context.Request.Headers.ContainsKey("Authorization") &&
context.Request.Headers["Authorization"][0].StartsWith("Bearer "))
{
var token = context.Request.Headers["Authorization"][0]
.Substring("Bearer ".Length);
//do stuff...
}
await next.Invoke();
});
虽然我个人不太关心冗长,但将上面的内容移至扩展名并使其更冗长,例如通过更明确地说明你在做什么:
if (!context.Request.Headers.ContainsKey("Authorization"))
throw new SomeException(); //or whatever
var authHeader = context.Request.Headers["Authorization"][0];
if (authHeader.StartsWith("Bearer "))
{
var token = authHeader.Substring("Bearer ".Length);
//do stuff...
}
关于c# - 获取请求的 Authorization header 值的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099051/