我在 Azure 中注册了一个应用程序,在其端点中我有一个名为
OpenID Connect metadata document
的端点,其值类似于 https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration
。
访问上面的 URI 将返回具有以下键值对的 JSON:
{
"jwks_uri": "https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys"
}
接下来
jwks_uri
我看到一组公钥及其 kid
、x5t
、n
等,用于 assertion
的服务器端验证,并使用私钥在客户端签名。
这里我面临两个问题:
App Registrations > my-app > Manage > Certificates and secrets > Certificates > Upload certificate
链成功上传公钥,jwks_uir
的内容仍然完好无损。因此,当我使用生成的私钥签署 assertion
时,它无法在 Azure 端进行验证,因为找不到我的 kid
我想你误会了一些事情。
您无法下载这些私钥。 Microsoft 使用它们在所有 M365、Azure 等上签署令牌。
上传应用程序的证书凭据允许您的应用程序使用该私钥进行身份验证(生成具有特定格式的 JSON Web 令牌证明您拥有私钥的 Entra ID)。 然后,Entra ID 可以根据您请求的范围为您的应用程序生成令牌(如果您的应用程序允许)。
如果您使用 Entra ID,您就不是生成代币的人,Entra ID 才是身份提供者。 仅当您的应用程序收到该应用程序的令牌时,您才验证由 Entra ID 生成的令牌。 为了进行验证,您只需要公钥。