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

Ras*_*kov 13 c# security authentication thinktecture-ident-server asp.net-web-api2

我正在调查IdentityServer 3如何工作,我仍然有完全理解的问题.

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

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

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

如果我理解得很好(可能我完全不理解),我应该有3个项目:

  • 客户
  • API
  • 承载IdentityServer的项目

所有项目都需要像图片一样的东西: 在此输入图像描述 图片上的步骤:

  1. 获得令牌
  2. 返回令牌
  3. 打电话给api
  4. 检查令牌是否正常
  5. 如果令牌好于返回数据,则显示错误

我的问题是:

  • 我的想法是如何工作的吗?
  • 我犯错误的地方?
  • 这个例子对我来说是否足够好?我错过了重要的事吗?
  • 我是否必须创建托管IdentityServer的项目,或者只需要代码示例?
  • IdentityServer主机项目是否必须是与api和客户端通信的控制台应用程序(如示例中所示),或者在现实世界中,这是以不同方式完成的吗?
  • 应该预测主机身份服务器是否了解客户端和用户?
  • 除主机标识服务器项目之外的其他一些项目是否应该了解客户端和用户?
  • 隐式流和混合流之间有什么不同,我需要什么呢?为什么?
  • 如何创建自己的登录视图?如果我使用web客户端,我想要登录html页面,但如果我使用wpf,还要有wpf登录视图,也可以使用移动客户端的不同视图.

编辑:我认为我需要 资源所有者流程.我将该资源用于查看用户输入用户名和密码的位置.

Sco*_*ady 3

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

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

Identity Server 必须了解客户端和用户才能对他们进行身份验证。唯一应该了解您的身份存储(用户)的其他项目是涉及管理、用户注册等事务的任何应用程序。客户端存储仅由 Identity Server 使用。

可以使用 Identity Server 模板或引入您自己的ViewService. 有关更多信息,请参阅文档:https://identityserver.github.io/Documentation/docsv2/advanced/customizingViews.html

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