我已经在这个主题上做了大量的研究,但是我对如何进行研究感到有些困惑。我的理解是这样的:
要将Identity Server 4与android应用程序一起使用,最好的方法是让android应用程序打开嵌入式浏览器实例,该实例将为用户提供用户可以登录的身份服务器登录页面。完成后,浏览器将关闭,并且将在应用程序上调用方法以传递访问api和声明所需的令牌(不包括令牌)。现在让我困惑的部分是我要使用哪种类型的客户端来完成此操作,以及该客户端的配置是什么样的?
这是我上面描述的图表,如果这是错误的,请随时纠正我。
我从中获得的文章是:https://tools.ietf.org/html/draft-ietf-oauth-native-apps-09#section-4.1
我正在使用nativescript来构建我的应用程序,并把它放在那里,因为我不确定这有多重要,因此,如果您认为确实如此,请提及原因。
Implicit客户端用于SPA应用程序,这是我已经设置并使用我的angular应用程序的客户端之一。现在,我正在尝试使其与本机脚本应用程序一起使用,但是我正在阅读的选项是GrantTypes.Hybrid
或GrantTypes.Code
我发现的一些答案表明我们应该使用Hybrid以及其他在说我们应该使用Code,但我不确定哪个正确,为什么?
让我困扰的另一件事是,这在Android应用程序上的安全性如何。使用SPA和隐式流,我们定义了登录和注销URL,因此这些域被列入白名单,并且不能与其他任何使其安全的域一起使用。但是,使用android应用程序究竟如何确保它的安全性?我无法在手机上存储秘密,因为任何人都可以将其挖掘出来,那么流程(Hybrid或Code,取决于我想使用的方式)到底能确保它的秘密?
答案 0 :(得分:1)
对于您所描述的流程,应使用“隐式授予类型”。不幸的是,尽管与远程服务器URL不同,“没有可靠的方法来确保给定重定向URI与特定移动应用程序之间的绑定得到遵守。” (来自What's the right OAuth 2.0 flow for a mobile app)。
如https://oauth.net/2/grant-types/implicit/中所述,“通常不建议使用隐式流程(有些服务器完全禁止使用此流程)。自最初编写规范以来,业界最佳做法已改为建议公众客户应使用带有PKCE扩展名的授权代码流。”
有关PKCE的详细信息,请参见Proof Key for Code Exchange by OAuth Public Clients。
答案 1 :(得分:0)
您可以通过查询字符串参数返回代码,并使用深层链接将用户再次重定向到应用:
my-demo://demo/callback?code=123...
my-demo://callback?code=123...
为此,您可以使用新的InAppBrowser插件的openAuth方法=> https://github.com/proyecto26/nativescript-inappbrowser
有关安全性的更多详细信息,您可以看到此线程=> https://github.com/NativeScript/NativeScript/issues/6923#issuecomment-473792810
答案 2 :(得分:0)
现在回答这篇文章可能为时已晚,但我认为它对这篇文章的其他读者有用。
总结答案:
这种情况下最好不要使用隐式流。
您应该使用混合或授权码流程之一,这完全取决于安全性在您的应用程序中的重要性吗?
事实上,您应该在安全和性能之间进行权衡。如果安全性对您来说更重要,您应该使用混合流,它可以减轻许多适用于浏览器通道的攻击,例如代码替换。
但此流程会产生性能开销,从而为您的应用程序和 IDP 提供更高的安全性。
如果平衡的安全级别足以满足您的应用程序,最好使用授权代码流程。
更详细的答案:
混合流使用包含 ID Token
的 c_hash
(它是返回的 authorization_code
的散列以将 authorization_code
绑定到 state
(它是链接到 session
本身)。
根据{{3}}:
OpenID Connect 的混合流也属于这一类,可以很好地减轻攻击。 OpenID Connect 客户端在请求中发送一个 nonce
。同时,nonce 存储在链接到 session
的 state
中。 nonce 将在未更改的已签名 ID Token
中返回,因此 ID 令牌和状态通过会话链接。 ID 令牌还包括 c_hash
,它是返回代码的哈希值。因此,代码和会话也是绑定的。如果对手只是交换代码,c_hash 的值将不匹配,攻击将被检测到。即使对手同时交换代码和 ID Token,由于 ID Token 中的 nonce 和会话将不匹配,因此攻击也不会奏效。