我遵循this tutorial来在API中实现身份验证,而邮递员则在对其进行测试。
我在使其工作方面遇到了困难,部分原因是我不确定我是否理解它应该如何工作。
如果删除[Authorize]
标记,则Get()
方法将运行,我将输入断点并收到期望的答复。
但是,如果有[Authorize]
,邮递员会用
{“消息”:“此请求的授权已被拒绝。”}
这也是我所期望的,但是我没有遇到任何断点,所以我无法弄清楚这种身份验证逻辑发生的位置
我将身份验证逻辑放在哪里,这意味着我将在哪里查询数据库以查看用户名/密码是否与记录匹配。
这是我正在使用的代码
public class X: ApiController
{
private void SetPrincipal(IPrincipal principal)
{ // breakpoint
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
{
HttpContext.Current.User = principal;
}
}
public static void Register(HttpConfiguration config)
{ // breakpoint
config.Filters.Add(new AuthorizeAttribute());
}
public HttpSessionStateBase Session;
[Authorize]
public string Get()
{ // breakpoint
...
}
答案 0 :(得分:0)
我做了以下更改
已在同一文件中添加
public class CustomAuthorization : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
AuthenticationHeaderValue authenticationHeaderValue = actionContext.Request.Headers.Authorization;
var userNamePasswordString = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationHeaderValue.Parameter));
}
}
更改了Register()
方法
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new CustomAuthorization());
}
和Get()
[CustomAuthorization]
public string Get()