Azure AD B2C - username/password 如何与 id_token 交换?

Azure AD B2C - how is username/password exchanged for id_token?

我们有一个开发项目专门使用 Azure AD B2C 对用户进行身份验证。我正在准备一些关于登录流程如何工作的文档,并在 Fiddler 中对其进行跟踪。

对于将用户名和密码正确提交到 login.microsoftonline.com 呈现的表单的用户,我知道他们会收到 id_token 响应,然后他们将响应提交给我们的网站以进行身份​​验证验证并建立 session.

在 Fiddler 中,我看到 POST 到 ourtenant.onmicrosoft.com,其中包括正确的用户名和密码。响应 body 是 "{"status":"200"}" 和一堆 set-cookie headers(为了简洁省略了内容)。

x-ms-cpim-slice
x-ms-cpim-dc
x-ms-cpim-cache
x-ms-cpim-trans

在此之后,我看到一个 GET 到 ourtenant.onmicrosoft.com,其中包含上述 cookie,并且 ourtenant.onmicrosoft.com 以 HTML 的 blob 响应,其中包含 id_token隐藏字段。

我的问题是,简而言之,Azure AD B2C 如何将第一个 POST 中正确的 username/password 条目与响应 GET 过程中提供的 id_token 相关联?

我的菜鸟猜测是它使用 x-ms-cpim-cache cookie,如果是这样,我只想了解它存储的内容以及它的保护程度。

就合同而言,cookie 是 B2C 内部的。由于它们是由B2C服务生成和消费的,因此内部结构可以随时更改。

密码在用户提供密码的同一请求中进行验证,然后被丢弃。

B2C 使用 cookie 跟踪用户在身份验证过程中取得的进展。此类 cookie 已加密。除此之外,说明这些 cookie 中的内容无济于事。今天,它可能是一个允许 B2C 在数据库中存储一些状态的 GUID,明天它可能是一些短暂的安全令牌等。