如何使用ASP.NETWebAPI的跨平台身份验证?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我怎么才能开始使用ASP.NET Web API进行编码认证,以便跨平台支持桌面,移动和Web?我读过一些进行RESTful认证的方法,比如在标头中使用令牌。

有没有使用这种方法的示例项目?

问题:

  1. 如果不是,我该如何修复[Authorize]属性来读取令牌?
  2. 我如何生成此令牌?我不认为我可以使用formsauthentication,因为它使用cookie。
  3. 我如何处理实际授权,客户端是否发送原始密码和用户名,然后生成令牌或者有其他方法吗?
  4. 我的网站在使用时如何处理?我听说这个处理方式与应用程序使用它的方式不同,例如获取域和授权。
提问于
用户回答回答于

我认为代币将是一条坚实的路。表单身份验证基于网络的Cookie。不是所有非浏览器客户端的最主要的情况。

我建议创建一个自定义的AuthorizationFilterAttribute并重写OnAuthorization方法。在该方法中,您可以检查在提供有效凭证后发给客户端的令牌是否存在。你可以在你想验证的任何方法或控制器上使用这个属性。以下是可能会参考的示例

 public class AuthorizeTokenAttribute : AuthorizationFilterAttribute 
{      
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (actionContext != null)
        {                
                if (!AuthorizeRequest(actionContext.ControllerContext.Request))
                {
                    actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized) { RequestMessage = actionContext.ControllerContext.Request }; 
                }
                return;
        }
    }

    private bool AuthorizeRequest(System.Net.Http.HttpRequestMessage request)
    {
        bool authorized = false;
        if (request.Headers.Contains(Constants.TOKEN_HEADER))
        {               
            var tokenValue = request.Headers.GetValues("TOKEN_HEADER");
            if (tokenValue.Count() == 1) {
                var value = tokenValue.FirstOrDefault();               
               //Token validation logic here
               //set authorized variable accordingly
            }                
        }
        return authorized;
    } }

TOKEN_HEADER只是一个字符串,表示客户端应该传回的用于验证请求的HTTP标头。

所以我们来看看它

  1. 客户端请求安全数据
  2. 客户端未被授权,返回带有未经授权状态码的响应
  3. 客户端发送凭证进行身份验证,这应通过HTTPS进行保护
  4. 一旦经过验证,客户端通过HTTP头或任何适合方式接收令牌
  5. 客户端尝试再次请求安全数据,这次将令牌附加到请求
  6. AuthorizeTokenAttribute将验证令牌并允许执行该操作。

另外,请查看John Petersen的这篇文章。ASP.NET Web API安全

用户回答回答于

有很多方法可以为用户验证REST服务。使用令牌是可能的,但只要使用基本身份验证就更简单了,就像您可以使用的标准和跨平台一样。

不要混淆授权身份验证。[授权]属性全部是关于授权的,但只能在用户使用其他机制进行验证之后。如果没有进行适当的认证,授权是完全没用的。

要检查的最佳资源是Dominick Baier,他是这方面的专家。

扫码关注云+社区