具有摘要式身份验证的 ASP.Net Web API

Posted

技术标签:

【中文标题】具有摘要式身份验证的 ASP.Net Web API【英文标题】:ASP.Net Web API with Digest Authentication 【发布时间】:2015-01-14 06:19:40 【问题描述】:

我已经编写了一堆 ASP.Net Web API,我想对其中的一些 API 进行身份验证。我已经从 here 开始使用 Digest Authentication 实现

我还参考了here的演示代码

我对代码有所了解,但我不知道在哪里以及如何连接现有数据库以从客户表中获取数据。如果有人知道如何实现这一点,请分享。

以下是一些认证方法:

DigestAuthorizationFilterAttributeBase.cs

protected override string GetAuthenticatedUser(HttpActionContext actionContext)
    
        var auth = actionContext.Request.Headers.Authorization;
        if (auth == null || auth.Scheme != Scheme)
            return null;

        var header = DigestHeader.Create(
            actionContext.Request.Headers.Authorization.Parameter, 
            actionContext.Request.Method.Method);

        if (!DigestNonce.IsValid(header.Nonce, header.NounceCounter))
         
            return null;
        
               var password = GetPassword(header.UserName);

            var hash1 = String.Format(
            "0:1:2",
            header.UserName,
            header.Realm,
            password).ToMd5Hash();

            var hash2 = String.Format(
                "0:1",
                header.Method,
                header.Uri).ToMd5Hash();

            var computedResponse = String.Format(
                "0:1:2:3:4:5",
                hash1,
                header.Nonce,
                header.NounceCounter,
                header.Cnonce,
                "auth",
                hash2).ToMd5Hash();

            return header.Response.Equals(computedResponse, StringComparison.Ordinal)
                ? header.UserName
                : null;

    

DigestAuthorizationFilterAttribute.cs

    public DigestAuthorizationFilterAttribute(bool issueChallenge = true) : base(issueChallenge)
    

    

    protected override bool IsUserAuthorized(string userName)
    
        return true;
    

    protected override string GetPassword(string userName)
    
        return userName;
    

【问题讨论】:

【参考方案1】:

一个例子是下面的方法:

protected override bool IsUserAuthorized(string userName)

    return true;

你可以做一些大致类似的事情:

protected override bool IsUserAuthorized(string userName)

    var user = db.Users.Where(u => u.username = userName);
    if(user.Any())
    
        return true;
    
    else
    
        return false;
    

您还需要检查密码是否有效。但你明白了。

希望这会有所帮助。

【讨论】:

以上是关于具有摘要式身份验证的 ASP.Net Web API的主要内容,如果未能解决你的问题,请参考以下文章

具有个人用户帐户身份验证的 ASP.NET MVC 5 WEB API

具有混合身份验证 JWT 和 SAML 的 ASP.NET Web API 2.2 OWIN

(Asp.Net MVC / Web-Api)中具有相同身份验证系统的多个项目

从 Xamarin 对 Asp.NET CORE Web 应用程序进行身份验证

使用 PHP POST 到 Web 服务的摘要式身份验证的客户端部分

asp.net web api 2 CORS 和身份验证授权配置