- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去的 10 多天里,我阅读了所有我能找到的关于理解 OAuth2 和 OpenID Connect 的内容,结果发现很多人对实现持不同意见,这让我很困惑。
据我了解,我发现的所有文章和示例都假设您希望访问例如。谷歌日历、个人资料信息或电子邮件,如果你例如。使用谷歌登录,但我不需要访问除我自己的 API 之外的其他 API - 我只想使用谷歌、Facebook 等登录,并获得一个可以链接到我自己数据库中的用户的 ID - 仅此而已.
我将尝试说明我的用例并将其用作示例。
图表上的一个注释:身份验证服务可能会内置到 API 网关中——我对这个例子并不重要,因为这不是关于“在哪里做”,而是“如何以最好的方式去做”,对于像我这样的架构,它用于我自己的 API/微服务,而不是访问 Google、Facebook 等外部 API
如果你能理解我想用上面这张图来说明什么,请告诉我我是否误解了这一点。
您在此处看到的此架构的最基本要求是:
最佳答案
以下答案仅适用于具有 3rd 方 IDP(如 Google)的 OpenID Connect 身份验证流程。 它不适用于您托管自己的 IDP 的架构。
(有一些 API 网关(例如 Tyk 或 Kong)支持开箱即用的 OpenID Connect。)
您可以使用 JWT(ID token )来保护您的 API .然而,这有一个缺点。 JWT 不能轻易撤销。
我不会推荐这个。 相反,您应该实现一个 OAuth2 授权服务器,它为您的 API 颁发访问 token 。 (在这种情况下,您有两个 OAuth2 流。一个用于身份验证,一个用于授权。来自 IDP 的 ID 和访问 token 仅用于身份验证。)
下图显示了一个设置,其中 API 网关和身份验证/授权服务器是两个独立的服务。 (如上所述,认证/授权也可以通过API网关来完成。)
身份验证流程(授权代码授予)调用标记为蓝色。授权流(隐式授权)调用被标记为绿色。
1:您的网络应用程序是从应用程序服务器加载的。
2a:用户单击您的登录按钮,您的 Web 应用程序构建授权 URL 并打开它。 (见:Authorization Request)
2b:因为用户没有通过身份验证并且没有与您的授权服务器的有效 session ,他想要访问的 URL 被存储,您的授权服务器响应重定向到其登录页面。
3:登录页面从您的授权服务器加载。
4a:用户点击“Login with ...”。
4b:您的授权服务器构建 IDP 授权 URL 并响应重定向到它。 (见:Authentication Request)
5a:IDP授权URL打开。
5b:因为用户没有通过身份验证并且没有与 IDP 的有效 session ,他想要访问的 URL 被存储,IDP 响应重定向到其登录页面。
6:登录页面从IDP加载。
7a:用户填写其凭据并单击登录按钮。
7b:IDP 检查凭据,创建一个新 session 并重定向到存储的 URL 进行响应。
8a:再次打开IDP授权URL。
(为简单起见,此处忽略了批准步骤。)
8b:IDP 创建一个授权并响应重定向到您的授权服务器的回调 URL。 (见:Authentication Response)
9a:回调网址打开。
9b:您的授权服务器从回调 URL 中提取授权码。
10a:您的授权服务器调用 IDP 的 token 端点,获取 ID 和访问 token 并验证 ID token 中的数据。 (见:Token Request)
(10b:如果某些需要的声明在 ID token 中不可用,您的授权服务器将调用 IDP 的用户信息端点。)
11a/b:您的授权服务器在您的服务/数据库中查询/创建用户,创建一个新 session 并响应重定向到存储的 URL。
12a:再次打开授权网址。
(为简单起见,此处忽略了批准步骤。)
12b/+13a/b:您的授权服务器创建/获取授权(创建访问 token )并响应重定向到您的 Web 应用程序的回调 URL。 (见:Access Token Response)
14a:回调URL打开。
14b:您的 Web 应用程序从回调 URL 中提取访问 token 。
15:您的网络应用程序进行 API 调用。
2018 年 17 月 16 日:API 网关检查访问 token ,将访问 token 与 JWT(包含用户信息等)交换并转发调用。
授权服务器调用 API 网关的设置也是可能的。 在这种情况下,授权完成后,授权服务器将访问 token 和 JWT 传递给 API 网关。然而,在这里,每次用户信息更改时,授权服务器都必须“通知”API 网关。
关于oauth-2.0 - 如何在微服务架构中使用 3rd 方 IDP 实现 OpenID Connect 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227737/
我正在尝试按照此处引用的所有步骤执行 Spring Security SAML 示例应用程序:http://docs.spring.io/autorepo/docs/spring-security-s
我的意思是,我可以在不将服务提供商注册到 IDp 的情况下向 IDp 发送 SAML 请求吗?我的雇主希望与服务提供商和身份提供商一起使用 JAVA 开发一个示例应用程序,因此服务提供商将向身份提供商
我们正在使用 React 构建 SPA。为了让用户登录,我们使用 Azure AD B2C 作为 Azure 租户中的一些用户。但我们希望扩大用户群并为另一个 Idp 管理的另一组用户提供访问权限。因
第 3 方 IdP(不是 Microsoft 产品)已存在并管理多个域中的数百或数千个用户。该 IdP 必须对这些用户保持权威。我不希望 Azure AD (AAD) 因获取所有这些用户的所有信息的副
我们在我的应用程序中构建 SSO 以使用 SAML 2.0 进行登录。在这里,我想构建 IDP 发起的用于注销的 SLO。 问题 1.我们需要在IDP中进行哪些配置来启动SLO? 如何使用 SAML
我正在研究 SSO 技术,尤其是 SAML 2.0,并且我看到了 IdP、IdP Lite、SP 和 SP Lite 的操作模式。我能找到的关于这些“精简”模式的唯一引用是在 SAML 2.0 spe
我想使用 Keycloak 设置 Google 联盟,但仅限于我公司的授权用户。 设置 Google 联盟允许任何 Google 帐户登录。 我查看了 Keycloak 上的身份验证流程,但一直找不到
谁能告诉我如何为 IDP 发起的 SSO 连接传递 RelayState。我们有 SSO 工作,但想要深层链接到服务提供商的应用程序中的页面。他们已经指示我们在 RelayState 上通过,但我不知
我正在使用 ITfoxtec Identity SAML2以 Keycloak 作为 IdP 的库。当请求 IdP 元数据信息时,ITfoxtec Identity SAML2 库似乎无法识别 标签,
我们计划构建自己的 SAML IDP。我有几个问题: 构建一个有意义吗? 如果是,方法是什么?我没有看到任何用于 SAML 的 Java 库。无法使用 spring-security-saml,因为它
具有“POST”绑定(bind)的 SAML 2.0:服务提供商是否可以通过任何方式要求 IdP 针对特定请求重新进行用户身份验证?我的意思是,第一次 Web 用户输入登录名/密码时,它会在浏览器内存
我在本地主机上安装了 Shibboleth 服务提供程序。我想连接到 shibboleth idp。 Error Message: No peer endpoint available to whic
我正在使用具有单点注销配置文件的 SAML2.0。当 SP 发起注销时,请求发起者 SP 会向 Ping(身份提供者)发送 LogoutRequest,Ping 向 SP 发送 LogoutRespo
我一直在尝试用java实现WEB SSO服务提供者。我正在使用 Shibboleth 身份提供商。一切工作正常,直到身份验证步骤,我成功地为用户创建 session /设置 cookie。但是,当我尝
我使用 WSO2 作为 IDP,我的 SP 只是一个使用 spring 框架部署在 tomcat 中的简单 Web 应用程序。 我想从 SP(网络应用程序)获取用户名密码,然后当我点击登录按钮时,我想
我正在尝试解密 IDP 在工件解析中发送的加密断言。但是我得到一个错误: 17:01:55.734 [http-8443-2] ERROR o.o.x.e.Decrypter - Error decr
我们有一个应用程序在云中运行良好,谷歌和 Github 作为 IDP。 尝试使用模拟器在本地工作时。调用 createSessionCookie失败:FirebaseAuthError: There
我正在使用 SP 端的 Kentor Authservices 和 IDP 端的 Shibboleth clone 解决与无限重定向相关的问题。我的问题是这可能是什么原因造成的,我如何拦截并记录 Ke
我有一个关于 SAML2 的基本问题。典型流程是用户从 protected SP 请求资源。 SP 检查用户是否有安全上下文(比如 cookie ?),如果没有找到安全上下文,它会构造 AuthReq
我已在 Azure AD 中创建了应用程序,按照以下步骤操作: 1 - 登录 Azure AD,单击“应用程序”选项卡,“添加”按钮。 2 - 选择“添加我的组织正在开发的应用程序”。 3 - 选择“
我是一名优秀的程序员,十分优秀!