Oauth 2.0 无头桌面客户端web服务客户端应该是动态注册的OIDC客户端还是其他什么?

Oauth 2.0 无头桌面客户端web服务客户端应该是动态注册的OIDC客户端还是其他什么?,oauth-2.0,identityserver4,openid-connect,Oauth 2.0,Identityserver4,Openid Connect,我的设置包括以下内容: 这是一个多租户系统,因此用户声明集包括tenant\u id,它唯一地标识用户所属的租户 基于IdentityServer4的web服务(提供OAuth2/OpenID连接服务):https://identity.example.com 一个单独的web服务(RESTfulWebAPI):https://random-number-generator-service.example.com 在许多位置的本地计算机上运行的无头程序(Windows服务):RandomNum

我的设置包括以下内容:

  • 这是一个多租户系统,因此用户声明集包括
    tenant\u id
    ,它唯一地标识用户所属的租户
  • 基于IdentityServer4的web服务(提供OAuth2/OpenID连接服务):
    https://identity.example.com
  • 一个单独的web服务(RESTfulWebAPI):
    https://random-number-generator-service.example.com
  • 在许多位置的本地计算机上运行的无头程序(Windows服务):
    RandomNumberConsumer.exe
    。此程序在
    租户id
    的上下文中使用
    随机数生成器服务
    ,因此用户需要在某个点进行身份验证,但除此之外,程序不关心用户的详细信息,只关心用户租户的详细信息
我理解这意味着
随机数生成器服务和
随机数消费者.exe都是“客户端”

必须在IdentityServer中注册所有客户端软件(静态地作为
客户机
对象实例的硬编码列表,或使用数据库存储客户机详细信息的某种动态注册。显然
随机数生成器服务
将进行静态注册,但是
RandomNumberConsumer.exe
应该如何注册

一些选择:

  • 添加一个新的web应用程序,用户可以使用web浏览器登录并注册其
    RandomNumberConsumer.exe
    安装(这将在
    identity.example.com
    的客户端数据库中添加一个新的
    客户端
    注册,并提供客户端密码)然后用户手动复制并粘贴客户端密码到
    RandomNumberConsumer.exe
    的配置文件中。内部数据库将每个客户端注册映射到
    租户id
    。这样做的优点是允许单个客户端访问撤销,但需要用户执行手动配置步骤,其中你不受欢迎
  • RandomNumberConsumer.exe
    注册一个客户端,不需要任何客户端密码,但客户端应用程序需要一个GUI组件,它可以使用该组件对用户进行身份验证,并将用户关联的
    访问令牌
    刷新令牌
    存储在其本地配置中。这具有以下优点:更简单的用户体验(用户将打开一个
    randomnumerconsumerconfiguration.exe
    程序,然后打开web浏览器访问身份验证页面,并使用带有临时
    localhost
    或自定义uri方案值的
    redirect\u uri
    获取数据)但这意味着当我们只希望实例与租户关联时,
    RandomNumberConsumer.exe
    实例与单个人类用户关联

  • 还有其他方法可以替代吗?

    客户端的每个实例都应该有自己的id。
    随机数生成器服务应该有一个id(即使在web场中运行)

    RandomNumberConsumer.exe
    安装在域外的不同计算机上,因此每次安装都应该有唯一的id

    客户端与用户无关,因为缺少子声明。客户端包含子声明的唯一时间是它代表用户(并征得用户同意)行事的时间。这可能适用于
    随机数生成器服务
    ,但不适用于没有用户交互的
    RandomNumberConsumer.exe
    (因为这是一项Windows服务)并且不需要用户的同意,因为用户请求安装时已给予同意

    当您谈论Windows服务时,不可避免地要配置该服务。但是,您可以在安装程序中实施配置步骤。因此,不必构建UI或修改配置文件,您可以采取以下方法:

  • 用户请求安装程序。批准后,将根据用户创建一个客户端并将其附加到租户(ClientClaims)
  • 用户开始下载安装程序并收到id/密码(在屏幕上,通过电子邮件)
  • 用户开始安装,在其中一个步骤中,用户必须输入id/密码。这是可以接受的,因为在安装软件时这是很常见的
  • 这具有您想要的优势,并且只需用户执行最少的步骤


    如果该服务具有更多配置选项,并且您希望为用户提供一个UI来维护这些选项,则向安装程序添加一个配置程序。这对于路由器和打印机来说非常常见。用户无需登录,因为它运行在本地(localhost网站)。您可以为浏览器添加一个链接作为快捷方式。

    由于
    RandomNumberConsumer.exe
    安装与用户的租户帐户相关联,当没有身份或
    用户
    时,我如何将索赔与客户端帐户相关联?只有用户才能拥有索赔-如果客户端成功通过
    random-number-s验证service
    则服务无法知道客户端与哪个租户帐户关联。客户端也可以有声明。下载应该只对用户可用,因此必须保护页面以确保用户登录。从用户声明中,您可以读取租户id并将其作为声明添加到客户端。