为什么混合流是Identityserver中Web应用程序的默认推荐选项?

迈克尔·陈

我使用身份服务器4构建了自己的身份服务器。我在示例甚至管理UI中经常看到的一件事是,对于Web应用程序(通常为MVC),默认为Hybrid类型(流程)。我只是看不出它有什么好处。

响应类型:代码令牌

  1. 即使响应类型为“ code”,仍会在交换的代码/令牌上返回id_token。
  2. id_token通常在客户端上没有用,因为客户端必须先处理JWT,并且大多数信息都可以发送到视图。
  3. 即使对于SPA,如果将响应类型设置为仅代码,则仍然会获得id_token(通过oidc-client)。

我缺少哪种用例,在初始响应中发送的id_token对视图而言足够重要?我正在使用authorization_code授予类型,但是我很好奇何时应该使用混合类型。

卢卡·布朗

据我了解,当前首选的流程是带有PKCE的代码。在.NET中的Core 2,混合动力是默认可能是因为对.NET核心2不包括内置的PKCE支持,但新的.NET核心3呢,和IS4文档的话:

“PKCE已经是官方推荐本机应用程序和SPA-并且默认情况下,OpenID Connect处理程序也支持ASP.NET Core 3发行版。”

使用Hybrid的原因是因为它解决了代码替换攻击,但是它带来了以下缺点:

1.“ id_token通过字体通道传输,并且可能泄漏其他(个人身份)数据”

2.“所有缓解措施(例如加密)都需要由客户端实施。这将导致客户端库的实现更加复杂。”

随着PKCE的引入也解决了替代问题,PKCE成为了更简单的解决方案。这来自斯科特·布雷迪(Scott Brady):

“过去,最佳实践是使用代码id_token的混合流响应类型,因为这为我们提供了一些在交换代码以交换令牌之前(通过nonce和c_hash参数)进行验证的方法。但是,由于现在使用PKCE,注入代码来冒充其他用户不再是风险,因此,我们可以安全地从浏览器中删除所有PII(身份令牌)。”

希望这能回答您的问题,因为我对此事的理解中等。使用的链接:
IS4文档
ASP.NET核心支持PKCE由斯科特·布雷迪
的OAuth 2.0安全最佳当前做法

编辑:似乎有一个答案类似的问题在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

移动应用程序的混合流如何工作?

为什么应用程序不遵守打印机的默认选项?

在 Spring Boot Web 应用程序中编译 LESS 文件的推荐方法是什么?

为什么我的IdentityServer4应用程序无法在Azure WebApp托管环境中启动?

Netbeans中针对Maven Web应用程序的UI推荐

Ubuntu 16.04中默认的“启动应用程序首选项”是什么?

为什么我的应用程序抽屉中显示了两个大多数默认应用程序?

为什么 Google 在他们自己的文档中不推荐 Google Firebase 用于多租户应用程序?

为什么我收到错误“默认包中的 Spring Boot 应用程序”

为什么Ubuntu中的默认应用程序总是会更改?

为什么在我的 rails 应用程序中更改了默认链接颜色?

为什么在控制台应用程序中未捕获默认的SynchronizationContext?

为什么默认应用程序在Ubuntu 14.04中没有.tex编辑器?

为什么(&)符号未显示在android默认消息传递应用程序中?

为什么在基于注释的Spring应用程序@Value中,默认值被解析为null?

为什么默认的rake任务在Rails应用程序中运行规范?

为什么HttpClient.PostAsync()不在Cosnole应用程序中完成但在Web应用程序中完成?

混合应用程序:通过本机(本地)文件在WebView中运行Web应用程序

什么是路由?为什么在单页Web应用程序中需要“路由”?

为什么我的旧平板电脑在混合应用程序中不支持某些CSS线?

为什么无法在IdentityServer中设置选项?

如何在Web应用程序中存储选项列表

为什么我的Spring Boot Web应用程序不能在Gradle中完全运行?

为什么POST方法在移动Web应用程序中不起作用

为什么不更新React Web应用程序中的sql行?

为什么navigator.push在我的Flutter Web应用程序中不起作用?

为什么我不能在Java Web套接字应用程序中写入PrintWriter?

为什么将Tomcat安装在Web应用程序的项目目录中(java)

为什么不建议使用MassTransit在Web应用程序中托管接收端点?