如果HttpRequest
带有Authorization
header,获取身份验证类型和身份验证凭据的最简单方法是什么?< / p>
例如,给定Authorization: Bearer YWxhZGRpbjpvcGVuc2VzYW1l
,如何从Bearer
获取YWxhZGRpbjpvcGVuc2VzYW1l
和HttpRequest
?
是的,我知道Identity框架存在。我不在这里使用它。如果您真的想尝试改变主意,我们可以讨论它in chat。
我正在编写一个函数:
var authorizationHeader = request.Headers["Authorization"].ToArray()[0];
var authorizationParts = authorizationHeader.Split(' ');
if (authorizationParts.Length == 2 && authorizationParts[0] == "Bearer")
{
var tokenValue = authorizationParts[1];
// ...
}
// ...
但它非常容易出错且冗长。例如,在第一行中,我没有检查数组是否包含至少一个元素。
答案 0 :(得分:3)
以下是一些简单的中间件:
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...
}
答案 1 :(得分:0)
您可以使用此代码段,它不像您的代码那样容易出错,但仍然冗长。
if (authorizationHeader != null && authorizationHeader.StartsWith("Bearer")) {
string credentials = authHeader.Substring("Bearer ".Length).Trim();
} else {
//Handle what happens if that isn't the case
throw new Exception("The authorization header is either empty or isn't Bearer.");
}
答案 2 :(得分:0)
const authorization = request.get('authorization')
if (authorization && authorization.toLowerCase().startsWith('bearer ')) {
return authorization.substring(7)
}
return null
this should work