首页 > 解决方案 > 哪个流程与 Identity Server 4 for Nativescript 应用程序一起使用,它是如何保护的?

问题描述

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

要将 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 应用程序,这究竟是如何变得安全的?我不能在手机上存储秘密,因为任何人都可以将其挖掘出来,那么流程(混合或代码,取决于我想使用的)究竟如何保证它的安全?

标签: c#nativescriptopenididentityserver4angular-nativescript

解决方案


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

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

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


推荐阅读