我的设置如下:
tenant_id
,它唯一地标识用户所属的租户。https://identity.example.com
。https://random-number-generator-service.example.com
。RandomNumberConsumer.exe
。该程序在random-number-generator-service
的上下文中使用tenant_id
,因此用户需要在某种程度上以某种方式进行身份验证,否则程序不关心用户的详细信息,只关心用户的租户的详细信息。我明白这意味着random-number-generator-service
和RandomNumberConsumer.exe
都是“客户”。
在IdentityServer中,必须注册所有客户端软件(静态地作为Client
对象实例的硬编码列表或使用数据库进行某种动态注册来存储客户端详细信息。显然random-number-generator-service
将具有静态注册,但RandomNumberConsumer.exe
应该如何注册?
一些选择:
RandomNumberConsumer.exe
安装(在Client
的客户端数据库中添加新的identity.example.com
注册,完成客户端密码)然后用户手动复制并粘贴客户端密钥进入RandomNumberConsumer.exe
的配置文件。内部数据库使用tenant_id
映射每个客户端注册。这具有允许单个客户端访问撤销的优点,但是要求用户执行不期望的手动配置步骤。RandomNumberConsumer.exe
进行单个客户端注册,但客户端应用程序需要一个GUI组件,可以使用该组件对用户进行身份验证,并将用户关联的access_token
和refresh_token
存储在其本地配置中。这样做的好处是具有更简单的用户体验(因为用户可以打开RandomNumberConsumerConfiguration.exe
程序,然后打开Web浏览器访问身份验证页面并使用带有临时redirect_uri
或自定义URI方案值的localhost
获取数据)但这意味着当我们只希望它与租户相关联时,RandomNumberConsumer.exe
实例与个人用户相关联。还有其他方法可以替代使用吗?
客户端的每个实例都应该拥有自己的id。 random-number-generator-service
应该有一个id(即使它在Web场中运行)。
RandomNumberConsumer.exe
安装在域外的不同计算机上,因此每个安装应具有唯一的ID。
客户端与用户无关,因为缺少子索赔。客户包含子索赔的唯一时间是它代表(并征得用户同意)的行为。这可能是random-number-generator-service
的情况,但不适用于没有用户交互的RandomNumberConsumer.exe
(因为它是Windows服务),并且当用户请求安装时不需要同意。
当您谈论Windows服务时,配置服务是不可避免的。但是,您可以在安装程序中实现配置步骤。因此,您可以采用以下方法,而不必构建UI或破解配置文件:
这具有您想要的优点,并且从用户那里获得最少的步骤。
如果服务具有更多配置选项,并且您希望为用户提供维护选项的UI,则将配置程序添加到安装程序。这对于路由器和打印机来说非常普遍。用户无需登录,因为它在本地运行(localhost网站)。您可以为浏览器添加链接作为快捷方式。