如何在不使用Identity的情况下在asp.net MVC中实现自定义身份验证/授权?

10 浏览
0 Comments

如何在不使用Identity的情况下在asp.net MVC中实现自定义身份验证/授权?

我正在开发一个asp.net MVC 5解决方案,现在需要实现身份验证和授权。该解决方案有一个外部服务管理着“繁重的工作”,该服务将在每个请求中获取用户名和密码,并在验证成功后返回一个带有用户权限(角色)的令牌,该令牌应与控制器中的属性进行匹配。

每个请求到我的解决方案都应该向外部服务发出请求。我该如何在现有的asp.net MVC 5解决方案中简单实现这个功能?我已经研究了Identity和Owin,但它们对于我想要实现的功能来说感觉过于臃肿。我也找到了一些关于Forms auth的信息,但似乎已经过时了?

我尝试的工作流大致如下:

用户请求一个控制器。该控制器被标记为类似“Require(Roles="IT")”的属性。我实现了IauthenticationFilter,并在OnAuthentication中调用我的服务来验证用户的请求。从返回值中,我将验证用户是否确实是他声称的身份,并且是否有权限进入该控制器上的指定操作。

我希望能得到一些意见,因为我很难找到关于如何实现自定义认证解决方案的可靠信息。有没有最佳实践?

谢谢!

0
0 Comments

在ASP.NET MVC中,可以通过实现接口`IPrincipal`和`IIdentity`来实现自定义的身份验证/授权。如果实现了这些接口,就能够利用MVC中现有的`[Authorize]`/`[AllowAnonymous]`属性功能,并且只有在需要除了用户/角色之外的功能时才进行扩展。

在ASP.NET/MVC中,应该在`Application_PostAuthenticateRequest`事件中设置这些接口的实现。关于如何正确实现这些接口已经有很多文章了,这里不再重复。以下是几篇相关的文章:

- [ASP.NET MVC - Set custom IIdentity or IPrincipal](https://stackoverflow.com/q/1064271/181087)

- [ASP.NET MVC - Custom IIdentity or IPrincipal with Windows Authentication](https://stackoverflow.com/q/43983374/181087)

- [Implementing IPrincipal and IIdentity in MVC with use of custom membership and role provider](https://stackoverflow.com/q/6597243/181087)

- [using custom IPrincipal and IIdentity in MVC3](https://stackoverflow.com/q/10742259/181087)

- [IdentityReboot - open source example of custom security provider](https://github.com/brockallen/BrockAllen.IdentityReboot)

非常感谢提供的信息,我会仔细阅读!

0