我试图了解如何在以下用例中使用OpenId Connect . 假设我们只有以下3个组件:
-
具有公开API的Web应用程序(Service Provider aka SP) .
-
用于上述SP的SSO的单独身份验证服务器(Identify Provider aka IDP) .
-
最终用户使用的本机客户端应用程序 . 此客户端应用程序使用SP的API .
所有流量都将通过HTTPS进行 . 以下是我设想OpenID Connect流程的工作方式:
-
本机应用程序将从SP请求"token" .
-
SP将看到用户未经过身份验证,并要求来自可信IDP的验证 .
-
在向IDP提供用户凭证后,IDP将向SP返回ID令牌和访问令牌 .
-
SP将验证ID令牌并将Access令牌提供给本机客户端应用程序,以用于API的所有后续请求 .
这是在这种情况下使用OpenID Connect的推荐方法吗?任何明显的安全问题?我看到的唯一一个是本机客户端应用程序可以使用Access令牌访问IDP上的用户信息 endpoints .
1 回答
关于第1 - 4点:
IDP请求的令牌不是SP . (通常IDP托管在单独的子域上) . 我喜欢STS术语(安全令牌服务)而不是IDP,它很容易描述OIDC服务器的角色:发行令牌的软件 .
我更喜欢说:从本机应用程序到SP的每个请求,受保护(非匿名)都必须由STS / IDP验证 . 将IDP视为受保护资源/ API / SP和native-app / RP /客户端之间的防火墙 .
IDP响应取决于正在使用的流(代码,隐式,混合,资源所有者,客户端凭据) . 这个要点可能有助于快速了解流程:OIDC and OAuth2 Flows
ID令牌已设计并且打算由客户端/ RP /本机应用程序使用 .
我认为所描述的用例很常见,由OpenIDConnect OAuth2处理 . 关于访问用户信息 endpoints ,它完全取决于您的IDP配置和RP / Client / NativeApp配置 .
示例:我使用IdentityServer3作为IDP / STS(其官方认证的OpenID Connect Provider):在IdentityServer3中,我可以通过配置禁用任何 endpoints 并限制RP范围 .
总结一下:我认为在您结束时建议使用用例 . 唯一的问题是我在上面强调的一些误解 . 但最重要的不是选择错误的流程或通过错误配置滥用标准 .
希望它有用 .