我正在开发一个我需要设置身份服务器4的应用程序。我有一个api作为资源。和web表单应用程序作为客户端。我在我的数据库中几乎没有教师,学生,家长等角色。如何在不使用标识的情况下使用此自定义数据库并执行身份验证和授权?
请建议。
答案 0 :(得分:2)
从您的其他问题here我可以更好地了解您的需求。
我认为您想要的一个解决方案是在一个单独的项目中使用自己的单独数据库设置identityserver4。我注意到标签identityserver3,但我认为去identityserver4是相当安全的。它不应该对客户端/用户产生影响,因为它们在概念上是兼容的。
1)为您的应用程序提供客户端/机密(您在身份服务器中配置),以便识别您的应用程序并授予对资源API的访问权限。以下是一些信息:http://docs.identityserver.io/en/dev/quickstarts/1_client_credentials.html
您只需配置一个客户端即可保护您的资源免受外部攻击。访问资源api的唯一方法是通过您的应用程序,因为您的应用程序正在进行实际调用。这也是缺点,您无法将令牌暴露给外界。
由于您的客户不是实际用户,因此您需要识别用户。您可以根据自己的喜好使用任何基于当前模型的机制。一个简单的用户/传递(有或没有asp.net身份)就足以确定角色。但请记住,您的应用程序可以完全访问资源API。
2)但是,由于身份服务器可用,为什么不使用它?为什么不想使用身份模型?我认为你应该考虑分离身份信息和你的数据模型。您的数据模型不应该知道安全性。安全性与您的数据模型无关。
为identityserver创建单独的数据库时,您可以在一个位置配置身份用户。您所需要的只是数据模型中用户的引用(子)。 http://docs.identityserver.io/en/dev/quickstarts/2_resource_owner_passwords.html
添加声明或角色,一切就绪,您将看到不需要在自定义数据库中保留身份数据。自定义数据库的结构保持不变,包括用户表但没有标识数据。
我认为这是一个更安全的解决方案,考虑到良好的文档和示例项目,它甚至可能成为更快的解决方案。