c# - 在真实场景中实现身份服务器身份验证

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

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

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

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

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

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

  • 客户
  • 应用程序接口(interface)
  • 托管 IdentityServer 的项目

而且所有的项目都应该需要像图片这样的东西: enter image description here 图片上的步骤:

  1. 获取 token
  2. 返回 token
  3. 调用接口(interface)
  4. 检查Token是否OK
  5. 如果 Token 比返回数据好,否则显示错误

我的问题是:

  • 我对它如何运作的想法是否正确?
  • 我哪里出错了?
  • 这个例子对我来说足够好吗?我错过了什么吗 重要吗?
  • 我是否必须创建托管 IdentityServer 的项目,或者这是 仅需要示例代码?
  • IdentityServer 宿主项目是否必须是控制台应用程序 与 api 和客户端(如示例)或在现实世界中通信 这是不同的做法?
  • 托管身份服务器的项目是否应该知道客户端和 用户 ?
  • 除了主机身份服务器项目之外,其他一些项目是否应该知道客户和用户?
  • 隐式流和混合流之间的区别是什么?我的情况需要什么?为什么?
  • 如何创建自己的登录 View ?如果我使用 Web 客户端,我希望有 html 页面用于登录,但如果我使用 wpf,我希望有 wpf 登录 View ,对于移动客户端也有不同的 View 。

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

最佳答案

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

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

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

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

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

关于c# - 在真实场景中实现身份服务器身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34789950/

相关文章:

java - 在 Java Web 应用程序中放置安全数据

javascript - 是否可以防止使用 XHR 加载页面?

来自 cron 作业的 svn 身份验证(osx 10.7)

c# - 我可以从同一解决方案中的不同项目访问另一个项目的嵌入式资源吗?

c# - 获取面板中的鼠标位置(当鼠标悬停在另一个UIElement上时)到ViewModel

ios - 在 iOS 上使用私钥加密数据

api - 如何使用oAuth2对SPA用户进行身份验证?

android - 在 android 中使用 restful web 服务处理身份验证

c# - XmlRpcResponse 序列化到 c# 对象

c# - lambda 作为默认参数