Android 使用Azure AD对内部单租户移动应用进行身份验证的适当OAuth流

Android 使用Azure AD对内部单租户移动应用进行身份验证的适当OAuth流,android,azure,authentication,oauth-2.0,azure-active-directory,Android,Azure,Authentication,Oauth 2.0,Azure Active Directory,我的公司有一个内部web应用程序和一些其他使用Azure AD进行身份验证的服务。因为它们是SPA和单租户,所以它们能够使用隐式授权流,以避免使用访问和刷新令牌 我正在构建一个内部移动应用程序,它需要使用Azure AD for auth,并且应该是单租户(我的组织)。我的理解是,这对于移动应用程序来说是不安全的。我看到的唯一适用于移动设备的流程包括使用访问令牌访问受Microsoft保护的API。我知道我能够公开我的内部托管API,但在Azure AD中,单租户配置似乎不允许这样做。因此,我不

我的公司有一个内部web应用程序和一些其他使用Azure AD进行身份验证的服务。因为它们是SPA和单租户,所以它们能够使用隐式授权流,以避免使用访问和刷新令牌

我正在构建一个内部移动应用程序,它需要使用Azure AD for auth,并且应该是单租户(我的组织)。我的理解是,这对于移动应用程序来说是不安全的。我看到的唯一适用于移动设备的流程包括使用访问令牌访问受Microsoft保护的API。我知道我能够公开我的内部托管API,但在Azure AD中,单租户配置似乎不允许这样做。因此,我不能将API访问作为一个作用域来请求,整个访问和刷新令牌系统都崩溃了

此外,我看到的所有客户端库都是为访问令牌设置的,不发送原始ID令牌或刷新它们。在我的应用程序上类似firebase的东西是解决方案吗?我已经在微软的文档中搜索过了,我正在努力

我知道我能够公开我的内部托管API,但在Azure AD中,单租户配置似乎不允许这样做

这是不正确的。您可以使用Azure AD来保护对API的访问,即使由单个租户客户端应用程序使用

您可以为您的后端API创建应用程序注册(您将在其中定义至少一个作用域),并为您的客户端应用程序创建单独的应用程序注册(将请求为您的后端API定义的作用域)

如果客户端应用程序和后端实际上都是一个逻辑应用程序,那么您还可以定义一个自应用程序注册,为其定义至少一个作用域,客户端应用程序将请求该作用域

在这两种情况下,客户端应用程序最终都会有一个对后端API的访问令牌,并且可以将该令牌用于API请求

我强烈建议不要直接实现流。使用一个SDK来处理所有的令牌杂耍。适用于iOS和Android的Microsoft身份验证库(MSAL)现在可供生产使用,这让它变得相当简单:

我知道我能够公开我的内部托管API,但在Azure AD中,单租户配置似乎不允许这样做

这是不正确的。您可以使用Azure AD来保护对API的访问,即使由单个租户客户端应用程序使用

您可以为您的后端API创建应用程序注册(您将在其中定义至少一个作用域),并为您的客户端应用程序创建单独的应用程序注册(将请求为您的后端API定义的作用域)

如果客户端应用程序和后端实际上都是一个逻辑应用程序,那么您还可以定义一个自应用程序注册,为其定义至少一个作用域,客户端应用程序将请求该作用域

在这两种情况下,客户端应用程序最终都会有一个对后端API的访问令牌,并且可以将该令牌用于API请求


我强烈建议不要直接实现流。使用一个SDK来处理所有的令牌杂耍。用于iOS和Android的Microsoft身份验证库(MSAL)现在可供生产使用,这使它变得非常简单:

谢谢。我能够按照您的建议分离出API并创建一个范围。下一个问题是,因为这是一个本地API,所以为了保护它,我需要通过一个名为API管理的Azure资源创建一个API网关,并进行一些DNS和certifcate配置,我猜网关的行为类似于代理?我想补充一点,我希望有另一种方法来实现这一点,因为API网关方法对于我们的用例来说似乎相当复杂。您可能想在单独的问题中问这个问题(尽管在StackOverflow上呆在这里要小心,因为库建议不是这个主题)。(您可能还想看看。)谢谢。我能够按照你的建议分离出API并创建一个作用域。下一个问题是,因为这是一个内部API,所以为了保护它,我需要通过一个名为API管理的Azure资源创建一个API网关,并在其中执行一些DNS和认证配置,我猜网关就像一个代理?我不知道uld补充说,我希望有另一种方法来实现这一点,因为API网关方法对于我们的用例来说似乎相当复杂。您可能想在单独的问题中问这个问题(尽管在StackOverflow上要小心,因为库建议不在主题中)。(您可能还想看看。)