我有一个第三方客户端应用程序(带有客户端机密的移动应用程序)连接到Identity Server以获得对资源服务器的访问的方案。在用户登录期间,客户端应用程序显示多个商店位置,以供用户登录。
客户端应用程序旨在为每个商店位置和一个Client_ID具有唯一的秘密。
当最终用户选择商店进行登录时,ID服务器会从客户端应用程序获取一个带有Client_ID且与商店位置匹配的特定机密的请求。
我在这里要解决的问题是,如何使Identity Server(3或4)根据商店位置执行用户登录。
我正在考虑拦截Client_Secret以在用户登录期间使用它,以通过使用适当的查找表来映射到正确的商店ID。
这是解决此问题的好方法,还是有人可以提出一些建议使该方案与Identity Server一起工作?
预期流量:
答案 0 :(得分:0)
如果您打算在移动应用程序本身而不是在浏览器客户端中完成登录流程,那么您将需要使用resource owner credentials
授予类型,在这种情况下,是否拥有一个授予类型并不重要或每个商店有很多秘密,因为它会根据您的情况对单个客户端进行身份验证。
另一方面,如果您打算在浏览器客户端中完成登录流程,那么您是否有多个秘密或一个秘密也无关紧要,因为在这种情况下,我假设商店选择将在登录中完成像您提到的屏幕一样,它是身份验证服务器的一部分。
总而言之,除非用户凭证和商店ID之间存在某种联系,否则商店位置似乎无关紧要。如果真是这样,那么这本质上是Identity Server 4的一个多租户问题,对于该问题已经展开了讨论并提出了建议。
https://github.com/IdentityServer/IdentityServer4/issues/2673
How should you secure a multi-tenant API with Identity Server?