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

时间:2016-01-14 12:43:50

标签: c# security authentication asp.net-web-api2 thinktecture-ident-server

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

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

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

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

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

  • 客户端
  • 阿比
  • 托管IdentityServer的项目

所有项目都需要像图片一样的东西: enter image description here 图片上的步骤:

  1. 获取令牌
  2. 返回令牌
  3. 致电api
  4. 检查令牌是否正常
  5. 如果令牌好于返回数据,则显示错误
  6. 我的问题是:

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

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

1 个答案:

答案 0 :(得分: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,因此不会进行身份验证(登录页面),只有授权(服务器到服务器)。