首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ASP.NET Web API的跨平台身份验证

使用ASP.NET Web API的跨平台身份验证
EN

Stack Overflow用户
提问于 2012-03-27 07:50:52
回答 4查看 18.6K关注 0票数 50

我如何开始使用ASP.NET Web API编写身份验证代码,以便跨平台支持桌面、移动和web?我读过一些进行RESTful身份验证的方法,比如在头中使用令牌。

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

问题:

  1. 如果没有,如何修复[Authorize]属性以读取令牌?
  2. 如何生成此令牌?我不认为我可以使用表单身份验证,因为它使用cookies。
  3. 我如何处理实际的授权,客户端发送原始密码和用户名然后我生成令牌,还是有其他方法?
  4. 当我的网站正在使用它时,我该如何处理?我听说这与应用程序使用时的处理方式不同,比如获取域名并对其进行授权。
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-05 11:56:49

我认为令牌将是一个可靠的方法。表单身份验证基于web的cookies。不过,对于所有非浏览器客户端来说,这并不是最理想的情况。

我建议的是创建一个自定义的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. Client请求secure data
  2. Client未经授权,返回带有未授权状态代码的响应
  3. client发送凭据进行身份验证,身份验证应通过HTTPS
  4. 进行保护。客户端通过HTTP头接收令牌,或者您可以使用的任何方式。

客户端尝试再次请求安全数据,这次将令牌附加到请求

  1. AuthorizeTokenAttribute将验证令牌并允许执行操作。

另外,请查看这篇由John Petersen撰写的文章。Making your ASP.NET Web API’s secure

票数 41
EN

Stack Overflow用户

发布于 2012-03-27 19:38:22

有很多方法可以验证REST服务的用户。使用令牌是可能的,但只使用Basic Authentication更简单,而且几乎是标准的和跨平台的。

不要将authorizationauthentication混淆。Authorize属性完全是关于授权的,但只有在使用其他机制对用户进行身份验证之后才能使用。如果不先做适当的身份验证,授权是完全无用的。

最好的参考资料是Dominick Baier,他是这方面的专家。

票数 21
EN

Stack Overflow用户

发布于 2012-04-19 23:30:54

我使用一个非常简单的方法:

  1. 使用其唯一的accessId和accessKey (例如,MD5散列GUID值)定义访问配置文件
  2. 将此类访问配置文件存储在数据库中
  3. 每个请求(GET/POST/等)必须提供accessId、queryHash (MD5哈希值表示查询)和签名( queryHash +accessKey的MD5哈希值)。当然,客户端需要将place!!!
  4. server保存在安全的(authenticate)
  5. further中,请求将检查accessKey和签名,使用相同的计算算法拒绝或授予访问配置文件授权可以根据请求类型使用访问配置文件

来完成

使用新的ASP.NET MVC web API的这种方法的服务可以服务于任何类型的客户端:浏览器/javascript和本机(桌面或移动)等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9881506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档