Web Api ASP.NET自定义身份验证

8 浏览
0 Comments

Web Api ASP.NET自定义身份验证

我有一个Web API,返回关于公司信息的基本信息。登录信息通过他们的数据库进行验证(用于桌面应用程序),但是使用AngularJS时,我只需要向API请求用户名和密码。我如何在这个API中实现一个身份验证系统(类似于Visual Studio默认的身份验证系统),使用他们的用户和密码?是否可以使用类似令牌的东西?你能帮我吗?非常感谢。

[EDIT 1]

顺便说一下,这个Web API使用一个旧的FoxPro数据库来管理用户和密码。因此,如果我要使用身份验证系统,我不知道如何使用这种类型的旧数据库进行上下文处理。

0
0 Comments

问题的出现的原因:用户想要了解如何在ASP.NET中自定义身份验证,其中涉及到与FoxproDb的通信以及身份验证的问题。

解决方法:首先,需要在ASP.NET中与FoxproDb进行通信。可以在Stackoverflow上查找相关问题的解答,例如:FoxPro Database and asp.net。如果可能的话,可以考虑将FoxproDb迁移到Sql Server。

其次,身份验证是一个大的话题,但是如果构建的是Intranet应用程序或者通过HTTPS进行安全保护的应用程序,那么基本身份验证是一个选项。我已经查看了大量的文章,其中Web Api2 Basic Authentication可能是最简单和最直接的方法,如果您选择使用AngularJs作为前端,那么您可能希望选择WebApi2作为后端。但请注意,使用基本身份验证时,您需要在每个请求中发送凭据,因此很容易窃取用户名和密码。如果要支持HTTP,可能需要选择其他身份验证系统。

其他相关链接:

User Authentication in ASP.NET Web API

感谢提供信息。我已经通过链接中的文章找到了解决方法。不过很抱歉,我不能告诉客户需要迁移数据库,因为他无法这样做。无论如何,还是非常感谢!

0
0 Comments

问题的出现原因:作者在文章中使用了Entity Framework来管理用户,而问题提出者的应用程序中使用的是旧的Foxpro数据库来存储用户和密码信息。

解决方法:问题提出者自己编写了自己的OAuthAuthorizationServerProvider,并且成功地实现了使用Bearer令牌以及基于Foxpro数据库的自定义用户名和密码验证,而没有遇到任何问题。

以下是整理好的文章:

最近,我在阅读一篇关于ASP.NET Web API的文章,文章链接为:Token Based Authentication in ASP.NET Web API 2 using Owin。在阅读文章的过程中,我注意到作者在用户管理方面使用了Entity Framework,并且在代码中声明了一个名为AuthContext的类,继承自IdentityDbContext。然而,我在自己的应用程序中使用的却是一个旧的Foxpro数据库,其中已经包含了用户和密码的信息。

对于这种情况,我进行了一些尝试。我编写了自己的OAuthAuthorizationServerProvider,并成功地实现了使用Bearer令牌以及基于Foxpro数据库的自定义用户名和密码验证。这样,我就能够在不遇到任何问题的情况下使用自己的用户和密码进行身份验证了。

如果你也遇到了类似的问题,可以参考下面的代码示例:

public class MyOAuthAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.Validated();
    }
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        // 从Foxpro数据库中获取用户信息
        string username = context.UserName;
        string password = context.Password;
        
        if (IsValidUser(username, password))
        {
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            identity.AddClaim(new Claim(ClaimTypes.Name, username));
            
            context.Validated(identity);
        }
        else
        {
            context.SetError("invalid_grant", "The username or password is incorrect.");
            return;
        }
    }
    
    private bool IsValidUser(string username, string password)
    {
        // 在这里进行与Foxpro数据库的验证逻辑
        // 如果验证通过,返回true;否则,返回false
        // ...
    }
}

通过上述代码示例,我们可以看到,我们可以自定义OAuthAuthorizationServerProvider来实现与Foxpro数据库的用户验证逻辑。在ValidateClientAuthentication方法中,我们可以针对客户端进行身份验证的逻辑;在GrantResourceOwnerCredentials方法中,我们可以针对资源所有者的用户名和密码进行验证的逻辑。在这个方法中,我们可以从Foxpro数据库中获取用户信息,并通过context.Validated(identity)方法来验证用户的身份。

希望这篇文章对你解决类似问题有所帮助!

0