在真实场景中实施身份服务器身份验证

Implement identity server authentication in real world scenario

我正在研究 IdentityServer 3 的工作原理,但我仍然无法完全理解。

一般概念对我来说很清楚,但我仍然不确定如何在实际项目中实现它。

这是我尝试在我的案例中实现的基本示例:link

我有 web api 项目,我想从任何客户端(mvc、wpf、phone…)调用我的 api 方法 所以我需要适合所有客户的实现。

如果我理解的很好(也可能是我没有完全理解),我应该有3个项目:

而且所有的项目都应该有如图所示的要求: 图片上的步骤:

  1. 获取令牌
  2. Return 代币
  3. 致电api
  4. 检查Token是否OK
  5. 如果 Token 比 return 数据好,否则显示错误

我的问题是:

编辑: 我认为我需要 Resource Owner flow 。我假设该资源我查看用户键入用户名和密码的位置。

您的基本流程是正确的,Identity Server 充当您的授权服务器,您的客户端和 Web API 分开。

您应该在其自己的项目中托管 Identity Server,以确保它与任何其他可能引入安全问题的逻辑分开。如何托管它取决于您和您的用例。通常您会看到它托管在 IIS 服务器上的 ASP.NET 项目中。

Identity Server 必须知道客户端和用户才能对其进行身份验证。唯一应该知道您的身份存储(用户)的其他项目是任何与管理、用户注册等相关的应用程序。客户端存储只会被身份服务器使用。

可以使用 Identity Server 模板或通过引入您自己的模板来修改视图 ViewService。有关详细信息,请参阅文档:https://identityserver.github.io/Documentation/docsv2/advanced/customizingViews.html

关于流程,资源所有者流程仅为 OAuth,因此不会有身份验证(登录页面),只有授权(服务器到服务器)。