- 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/
我花了几个小时在 R-exts 手册和文档上parse_Rd() (以及引用文献中的 PDF 文档),但我 还没搞清楚是什么results=rd手段或如何使用它。我以为我可以 使用 R 代码片段动态创
这是对 this 的后续问题.我正在使用 为 __AVR_HAVE_LPMX__ 处理器 (avr25) 编写代码 GNU C (WinAVR 20100110) 版本 4.3.3 (avr)/由 G
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
我正在记录一个内部的、非导出的函数。 roxygen2 正在创建一个 Rd 文件,即使文档中没有 @export 标记。 roxygen2 为以下文档创建了一个 Rd 文件。我错过了什么? #
如何正确指定 rd 文件的编码?我正在尝试将以下记录虚拟函数的帮助文件添加到我的包中: \name{dummy} \encoding{ISO-8859-2} \alias{dummy} \title{
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
结合试图为自己寻找解决方案 this question ,我发现自己陷入了尝试编写有效 Rd 标记的过程中。我想要的是添加一个名为 Raw Function Code 的部分并将函数的代码放在它下面。
我正在为一个函数填写一个 Rd 文件。 当我在 Details 部分使用\eqn{2^{x}} ,然后构建和安装包时,没有上标指数。 查看 R-exts.pdf,它以 Poisson.Rd 为例说明如
我在一家从事能源业务的研发公司工作。我们开发了一些成功的产品,但现在似乎所有的时间都花在解决与这些产品相关的问题上。我们似乎没有时间开发新产品。有没有人知道如何既能处理现有产品出现的问题,又能有时间和
我正在尝试将 R 文档文件(扩展名 .Rd)转换为纯文本。我知道 RdUtils 包含一个名为 Rdconv 的工具,但据我所知它只能从命令行使用。有没有办法从 R session 中访问 Rdcon
正如标题所说,我在生成 时遇到问题R 使用 打包文档roxygen2 . 我 99.9% 肯定已经按照说明准备了一切here and here已经。我知道几乎不可能得到像这样的主要远程诊断非病例的答案
我正在使用 Rstudio 简化 Sweave 和 R 进行数据分析,我将与其他分析师分享。为了使变量的编码更加清晰,最好有一个帮助文件这样他们可以调用?myData。并获得有用的文件,如果他们需要的
简短版本:我可以使用 roxygen 模拟 stats 包中 Normal 的文档吗? 长版本:我正在开发一个包,并试图通过在一个标题下收集许多具有公共(public)输入/参数的函数来使文档更具可读
我无法使用 RStudio 和 Roxygen2 为我的包生成 .Rd 文档文件。首先,我要提一下,我已经遇到了此处发布的类似问题,并且已经完成了以下操作: Roxygen2 阻止在文件开头以 #'
我正在通过 JS 调用 ipinfodb。最近我收到了大约 5-6 条回复(来自大约 600 条),将国家/地区代码指定为“RD”。 “RD”不是 ccTLD,我找不到任何理由将其退回。有没有人遇到过
我正在使用 roxygen 来记录 R 包。我在包的“man/macros”子目录中有一个宏文件 myMacro.Rd。该文件指定 \myMacro宏。 (该宏将 标记插入 HTML 帮助文件以更改
我有一个 Windows 批处理文件,它删除了 Windows 主目录中的一些目录。 REM clear Ivy cache on windows RD /s %Use
以下 MWE 无法编译(通过 devtools::document()): #' MWE #' #' @examples #' format('{}') # Works #' format('{')
.R 和 .rd 文件(文档)的名称是否需要与它所指的函数具有完全相同的名称? 例如,我能否在同一个 R 包中拥有一个名为“b”的函数和另一个名为“B”的函数,并将文档写入不同的 .R 和 .rd 文
实际问题 如何避免 Rd 文件名冲突 S4 泛型及其方法不一定全部定义在同一个包中(包含(某些)自定义方法的包取决于包含泛型的包)和 使用 roxygenize()从包装 roxygen2生成实际的
我是一名优秀的程序员,十分优秀!