在我们的常见问题解答中了解详细信息
。
本文使用示例 Android 应用程序(Kotlin 和 Java)来说明如何将 Azure Active Directory B2C (Azure AD B2C) 身份验证添加到移动应用。
OpenID Connect (OIDC) 是在 OAuth 2.0 上构建的身份验证协议。 可以使用 OIDC 安全地将用户登录到应用程序。 此移动应用示例将
Microsoft身份验证库 (MSAL)
与 OIDC 授权代码 PKCE 流配合使用。 MSAL 是一个Microsoft提供的库,可简化向移动应用添加身份验证和授权支持。
登录流涉及以下步骤:
用户打开应用并选择
登录
。
该应用将打开移动设备的系统浏览器,并启动对 Azure AD B2C 的身份验证请求。
用户
注册或登录
、
重置密码
或使用
社交帐户
登录。
用户成功登录后,Azure AD B2C 会将授权代码返回到应用。
应用执行以下操作:
-
将此授权代码交换到 ID 令牌、访问令牌和刷新令牌。
-
它读取 ID 令牌声明。
-
它将令牌存储在内存中缓存中供以后使用。
应用注册概述
若要使应用能够使用 Azure AD B2C 登录并调用 Web API,请在 Azure AD B2C 目录中注册两个应用程序。
通过移动应用程序
注册,应用可以使用 Azure AD B2C 登录。 在应用注册期间,指定
重定向 URI
。 重定向 URI 是用户在使用 Azure AD B2C 进行身份验证后重定向到的终结点。 应用注册过程生成
应用程序 ID
,也称为
客户端 ID
,用于唯一标识移动应用(例如
,应用 ID:1
)。
-
注册 Web API 后,你的应用就能够调用受保护的 Web API。 注册将公开 Web API 权限(范围)。 应用注册过程会生成一个应用程序 ID,用于唯一标识你的 Web API(例如,应用 ID:2)。 授予移动应用(应用 ID:1)对 Web API 范围(应用 ID:2)的权限。
下图演示了应用注册和应用程序体系结构:
调用 Web API
身份验证完成后,用户将与应用交互,应用会调用受保护的 Web API。 Web API 使用
持有者令牌
身份验证。 持有者令牌是应用从 Azure AD B2C 获取的访问令牌。 应用在 HTTPS 请求的授权标头中传递令牌。
Authorization: Bearer <access token>
如果访问令牌范围与 Web API 范围不一致,身份验证库将获取具有正确范围的新访问令牌。
注销流程涉及以下步骤:
- 用户从应用中注销。
- 应用清除其会话对象,并且身份验证库清除其令牌缓存。
- 应用将用户定向到 Azure AD B2C 注销终结点,以终止 Azure AD B2C 会话。
- 用户被重定向回应用。
运行以下内容的计算机:
Java 开发工具包 (JDK) 8 或更高版本
Apache Maven
Android API 级别 16 或更高版本
Android Studio
或其他代码编辑器
当用户尝试登录你的应用时,该应用会通过
用户流
向授权终结点发起身份验证请求。 用户流定义并控制用户体验。 用户完成用户流后,Azure AD B2C 会生成一个令牌,然后将用户重定向回应用程序。
请
创建用户流或自定义策略
(如果你尚未这样做)。 重复这些步骤以按如下所述创建三个单独的用户流:
-
组合的“登录和注册”用户流,例如
。 此用户流还支持“忘记密码”体验。
-
“个人资料编辑”用户流,例如
。
-
“密码重置”用户流,例如
。
Azure AD B2C 将在用户流名称前面追加
B2C_1_
。 例如,
susi
将变为
B2C_1_susi
。
步骤 2:注册移动应用程序
创建移动应用和 Web API 应用程序注册,并指定 Web API 的范围。
步骤 2.1:注册 Web API 应用
请按照以下步骤创建 Web API 应用注册(应用 ID: 2):
-
登录到
Azure 门户
。
-
确保正在使用的目录包含 Azure AD B2C 租户。 在门户工具栏中选择“目录 + 订阅”图标。
-
在“门户设置 | 目录+订阅”页上的“目录名称”列表中找到你的 Azure AD B2C 目录,然后选择“切换”。
-
在 Azure 门户中,搜索并选择
Azure AD B2C
。
-
选择“应用注册”,然后选择“新建注册”
。
-
对于名称,请输入应用程序的名称(例如 my-api1) 。 保留“重定向 URI”和“支持的帐户类型”的默认值。
-
选择“注册”。
-
完成应用注册后,选择“概述”。
-
记录“应用程序(客户端) ID”值,以便在稍后配置 Web 应用程序时使用。
-
在“管理”下,选择“公开 API” 。
-
选择“应用程序 ID URI”旁边的“设置”链接。 将默认值 (GUID) 替换为一个唯一名称(例如“tasks-api”),然后选择“保存”。
Web 应用在请求 Web API 的访问令牌时,应将此 URI 添加为你为 API 定义的每个范围的前缀。
-
在“此 API 定义的范围”下选择“添加范围”。
-
若要创建一个用于定义对 API 的读取访问权限的范围,请执行以下操作:
-
对于“范围名称”,输入“tasks.read” 。
-
对于“管理员同意显示名称”,输入“对任务 API 的读取访问权限” 。
-
对于“管理员同意说明”,输入“允许对任务 API 进行读取访问” 。
-
选择
添加作用域
。
-
选择“添加范围”,然后添加一个用于定义对 API 的写入访问权限的范围:
-
对于“范围名称”,输入“tasks.write” 。
-
对于“管理员同意显示名称”,“对任务 API 的写入访问权限” 。
-
对于“管理员同意说明”,输入“允许对任务 API 进行写入访问” 。
-
选择
添加作用域
。
步骤 2.3:注册移动应用
若要创建移动应用注册,请执行以下作:
-
登录到
Azure 门户
。
-
选择“应用注册”,然后选择“新建注册”
。
-
在
“名称”
下,输入应用程序的名称(例如
android-app1
)。
-
在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)”
。
-
在
“重定向 URI
”下,选择
“公共客户端/本机”(移动和桌面),
然后在 URL 框中输入以下 URI 之一:
-
对于 Kotlin 示例:
msauth://com.azuresamples.msalandroidkotlinapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D
-
对于 Java 示例:
msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D
-
选择“注册”。
-
完成应用注册后,选择“概述”。
-
配置移动应用程序时,请记录
应用程序(客户端)ID
供以后使用。
-
选择应授予 Web 应用程序访问权限的 API(应用 ID:2)。 例如,输入“my-api1”。
-
在“权限”下展开“任务”,然后选择之前定义的范围(例如,tasks.read 和 tasks.write )。
-
选择“添加权限”。
-
选择“向<租户名称
授予管理员许可”。
-
选择
“是”
。
-
选择“刷新”,然后验证两个范围的“状态”下是否均显示“已授予...” 。
-
从“配置权限”列表中,选择范围,然后复制范围全名。
此示例获取一个访问令牌,其中包含移动应用可用于 Web API 的相关范围。 若要从代码调用 Web API,请执行以下作:
-
使用现有的 Web API,或创建新的 Web API。 有关详细信息,请参阅
使用 Azure AD B2C 在自己的 Web API 中启用身份验证
。
-
更改示例代码以
调用 Web API
。
使用 Android Studio 或其他代码编辑器打开示例项目,然后打开
/app/src/main/res/raw/auth_config_b2c.json
文件。
auth_config_b2c.json
配置文件包含有关 Azure AD B2C 标识提供者的信息。 移动应用使用此信息与 Azure AD B2C 建立信任关系,让用户登录和注销,获取令牌并对其进行验证。
更新以下应用设置属性: