Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 对于这个用例,这是OpenID Connect的正确用法吗?_Authentication_Single Sign On_Openid_Openid Connect - Fatal编程技术网

Authentication 对于这个用例,这是OpenID Connect的正确用法吗?

Authentication 对于这个用例,这是OpenID Connect的正确用法吗?,authentication,single-sign-on,openid,openid-connect,Authentication,Single Sign On,Openid,Openid Connect,我试图理解在下面的用例中如何使用OpenId Connect。假设我们只有以下3个组件: 具有公开API的Web应用程序(服务提供商又名SP) 一个单独的身份验证服务器(Identification Provider又名IDP),用于 使用上述SP进行SSO 最终用户使用的本机客户端应用程序。此客户端应用程序使用 SP的API 所有流量都将通过HTTPS。以下是我对OpenID连接过程的设想: 本机应用程序将从SP请求“令牌” SP将看到用户未通过身份验证并请求 来自可信IDP的验证 将用户

我试图理解在下面的用例中如何使用OpenId Connect。假设我们只有以下3个组件:

  • 具有公开API的Web应用程序(服务提供商又名SP)
  • 一个单独的身份验证服务器(Identification Provider又名IDP),用于 使用上述SP进行SSO
  • 最终用户使用的本机客户端应用程序。此客户端应用程序使用 SP的API
所有流量都将通过HTTPS。以下是我对OpenID连接过程的设想:

  • 本机应用程序将从SP请求“令牌”
  • SP将看到用户未通过身份验证并请求 来自可信IDP的验证
  • 将用户的凭证提供给IDP后,IDP将 将ID令牌和访问令牌返回给SP
  • SP将验证ID令牌并将访问令牌提供给 用于对API的所有后续请求的本机客户端应用程序

  • 在这种情况下,这是使用OpenID Connect的推荐方法吗?有什么明显的安全问题吗?我唯一看到的是,本机客户端应用程序可以使用访问令牌访问IDP上的用户信息端点。

    关于第1-4点:

  • 从IDP而不是SP请求的令牌(通常IDP托管在单独的子域上)。我喜欢STS术语(安全令牌服务)而不是IDP,IDP很容易描述OIDC服务器的角色:发布令牌的软件

  • 我更愿意说:从本机应用程序到SP的每个受保护(非匿名)请求都必须由STS/IDP进行验证。将IDP视为受保护资源/API/SP和本机app/RP/client之间的防火墙

  • IDP响应取决于所使用的流(代码、隐式、混合、资源所有者、客户端凭据)。此要点可能有助于快速理解流程:

  • 设计用于客户端/RP/本机应用程序的ID令牌

  • 我认为OpenIDConnect+OAuth2处理所描述的用例非常常见。关于访问用户信息端点,它完全取决于您的IDP配置和RP/Client/NativeApp配置

    例如: 我使用IDP/STS(其官方认证的OpenID连接提供程序):在IdentityServer3中,我可以通过配置禁用任何端点,并限制RP范围

    总而言之:我认为这个用例是推荐的,正如您总结的那样。唯一的问题是我上面强调的一些误解。但最重要的是不要选择错误的流程或通过错误配置滥用标准


    希望它有用。

    要详细介绍您对OIDC+OAuth2处理此用例的评论,这可能是一个更好的解决方案。SP不会与本机应用共享访问令牌。SP将仅用于访问IDP上的用户信息端点。然后SP将生成自己的OAuth令牌,以提供给本机应用程序进行后续调用。基本上使用OIDC对用户进行身份验证,并使用OAuth对本机应用程序进行会话跟踪。这将提供更好的分离。我不确定我是否理解它如何提供更好的分离(这有什么意义?)。任何OP(OIDC)提供程序都隐式地是OAuth2提供程序。没有OAuth2,OIDC就不可能存在。所以OP应该处理所有的身份验证和授权逻辑,包括会话管理。SP如何生成自己的OAuth令牌?从哪里来?此外,SP是数据提供商,因此,除了提供数据之外,您为什么还要赋予它安全责任呢。希望它有用,尽管我可能会误解。