2

我一直在对这个主题进行大量研究,但我对如何去做有点困惑。我的理解是这样的:

要将 Identity Server 4 与 android 应用程序一起使用,最好的方法是让 android 应用程序打开一个嵌入式浏览器实例,该实例将为用户呈现身份服务器登录页面,用户可以在其中登录。完成后,浏览器将关闭并且将在应用程序上调用一个方法来传递访问 api 和声明所需的令牌以及其他令牌。现在让我感到困惑的部分是我们要使用哪种类型的客户端来完成此任务以及该客户端的配置是什么样的?

这是我上面描述的图表,如果这是错误的,请随时纠正我。

应用身份流程
我从中得到它的文章是:https ://datatracker.ietf.org/doc/html/draft-ietf-oauth-native-apps-09#section-4.1

我正在使用 nativescript 来构建我的应用程序并将其放在那里,因为我不确定这有多重要,所以如果您认为它确实如此,请说明原因。

隐式客户端用于 SPA 应用程序,这是我已经设置并使用我的 Angular 应用程序的客户端之一。现在我正试图让它与本机脚本应用程序一起工作,但我正在阅读的选项是GrantTypes.Hybrid或者GrantTypes.Code我发现的一些答案说我们应该使用混合,而其他人说我们应该使用代码,我是不确定哪个是正确的,为什么?

困扰我的另一件事是这在 android 应用程序上是如何安全的。使用 SPA 和隐式流程,我们定义了登录和注销 url,因此这些域被列入白名单,并且不能与任何其他域一起使用,从而使其安全。但是,对于 android 应用程序,这究竟是如何变得安全的?我不能在手机上存储秘密,因为任何人都可以将其挖掘出来,那么流程(混合或代码,取决于我想使用的)究竟如何保证它的安全?

4

3 回答 3

1

对于您描述的流程,您应该使用“隐式授予类型”。不幸的是,尽管与远程服务器 URL 不同,“没有可靠的方法来确保给定重定向 URI 和特定移动应用程序之间的绑定得到遵守。” (来自What's the right OAuth 2.0 flow for a mobile app)。

正如https://oauth.net/2/grant-types/implicit/中所说,“一般不建议使用隐式流(有些服务器完全禁止此流)。在最初编写规范以来的时间,行业最佳实践已更改为建议公共客户端应改为使用带有 PKCE 扩展的授权代码流。”

有关 PKCE 的详细信息,请参阅OAuth 公共客户端的代码交换证明密钥

于 2018-12-09T22:16:22.060 回答
0

回答这篇文章可能为时已晚,但我认为它可能对这篇文章的其他读者有用。

总结答案:

在这种情况下最好不要使用隐式流。
您应该使用混合授权代码流程之一,这完全取决于您的应用程序的安全性有多重要?实际上,您应该在安全性性能
之间进行权衡。如果安全性对您来说更重要,您应该使用 Hybrid 流程,它可以缓解许多适用于浏览器通道的攻击,例如代码替换。但是此流程会产生性能开销,从而为您的应用程序和 IDP 提供更高的安全性。 如果平衡的安全级别足以满足您的应用程序,则最好使用授权代码流程。

更详细的答案:

混合流使用ID Token包含c_hash(这是authorization_code返回绑定authorization_codestate(链接到session自身)的哈希值。
根据这篇文章

OpenID Connect 的混合流也属于这一类,可以很好地缓解攻击。OpenID Connect 客户端nonce在请求中发送一个。同时,nonce 存储在sessionstate. 随机数将以签名ID Token不变的形式返回,因此 ID 令牌和状态通过会话链接。ID Token 还包括c_hash,它是返回代码的哈希值。因此,代码和会话也是绑定的。如果对手只是交换代码,c_hash 的值将不匹配,攻击将被检测到。即使攻击者交换了代码和 ID Token,攻击也不会起作用,因为 ID Token 中的 nonce 和会话将不匹配。

于 2021-05-12T15:25:48.257 回答
0

您可以通过查询字符串参数返回代码,使用深度链接再次将用户重定向到应用程序:

  • 安卓网址:my-demo://demo/callback?code=123...
  • iOS 网址:my-demo://callback?code=123...

为此,您可以使用新的 InAppBrowser 插件的 openAuth 方法 => https://github.com/proyecto26/nativescript-inappbrowser

有关安全性的更多详细信息,您可以查看此线程 => https://github.com/NativeScript/NativeScript/issues/6923#issuecomment-473792810

于 2019-05-10T23:09:37.480 回答