在真实场景中实施身份服务器身份验证
Implement identity server authentication in real world scenario
我正在研究 IdentityServer 3 的工作原理,但我仍然无法完全理解。
一般概念对我来说很清楚,但我仍然不确定如何在实际项目中实现它。
这是我尝试在我的案例中实现的基本示例:link
我有 web api 项目,我想从任何客户端(mvc、wpf、phone…)调用我的 api 方法
所以我需要适合所有客户的实现。
如果我理解的很好(也可能是我没有完全理解),我应该有3个项目:
- 客户
- Api
- 托管 IdentityServer 的项目
而且所有的项目都应该有如图所示的要求:
图片上的步骤:
- 获取令牌
- Return 代币
- 致电api
- 检查Token是否OK
- 如果 Token 比 return 数据好,否则显示错误
我的问题是:
- 我的想法是否可行?
- 我哪里出错了?
- 这个例子对我来说足够好吗?我错过了什么吗
重要吗?
- 我是否必须创建托管 IdentityServer 的项目,或者这是
仅需要示例代码?
- IdentityServer 宿主项目是否必须是控制台应用程序
与 api 和客户(如示例)或在现实世界中交流
这是不同的做法?
- 托管身份服务器的项目应该知道客户端和
用户 ?
- 除了主机身份服务器项目之外的其他一些项目是否应该知道客户端和用户?
- 隐式流和混合流之间的区别是什么,我需要什么以及为什么?
- 如何创建自己的登录视图?如果我使用 Web 客户端,我希望有 html 页面用于登录,但如果我使用 wpf,我希望有 wpf 登录视图,对于移动客户端也有不同的视图。
编辑:
我认为我需要 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,因此不会有身份验证(登录页面),只有授权(服务器到服务器)。
我正在研究 IdentityServer 3 的工作原理,但我仍然无法完全理解。
一般概念对我来说很清楚,但我仍然不确定如何在实际项目中实现它。
这是我尝试在我的案例中实现的基本示例:link
我有 web api 项目,我想从任何客户端(mvc、wpf、phone…)调用我的 api 方法 所以我需要适合所有客户的实现。
如果我理解的很好(也可能是我没有完全理解),我应该有3个项目:
- 客户
- Api
- 托管 IdentityServer 的项目
而且所有的项目都应该有如图所示的要求:
- 获取令牌
- Return 代币
- 致电api
- 检查Token是否OK
- 如果 Token 比 return 数据好,否则显示错误
我的问题是:
- 我的想法是否可行?
- 我哪里出错了?
- 这个例子对我来说足够好吗?我错过了什么吗 重要吗?
- 我是否必须创建托管 IdentityServer 的项目,或者这是 仅需要示例代码?
- IdentityServer 宿主项目是否必须是控制台应用程序 与 api 和客户(如示例)或在现实世界中交流 这是不同的做法?
- 托管身份服务器的项目应该知道客户端和 用户 ?
- 除了主机身份服务器项目之外的其他一些项目是否应该知道客户端和用户?
- 隐式流和混合流之间的区别是什么,我需要什么以及为什么?
- 如何创建自己的登录视图?如果我使用 Web 客户端,我希望有 html 页面用于登录,但如果我使用 wpf,我希望有 wpf 登录视图,对于移动客户端也有不同的视图。
编辑: 我认为我需要 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,因此不会有身份验证(登录页面),只有授权(服务器到服务器)。