首页 > 解决方案 > 每次登录时都会提示用户同意应用程序 - Azure AD v2.0

问题描述

我有一个本机应用程序 (Electron),其中集成了 Azure AD v2.0 登录体验。我们目前只启用了基于 Microsoft 帐户的登录。

这是我的登录 URL,如下所示:

const url = `https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=<my-application-id>&response_type=id_token&redirect_uri=${encodeURIComponent('urn:ietf:wg:oauth:2.0:oob')}&scope=openid%20profile%20email&response_mode=fragment&nonce=<some-random-value&state=<some-random-value>`;

使用此链接,用户可以成功登录。那里没有问题。但是,每次用户登录时,都会在提供凭据后显示同意对话框。

据我所知,如果用户已同意某个应用,并且该应用要求的权限(而是范围)没有变化,则不应再次提示用户同意。

我想知道为什么会这样。我什至尝试附加prompt=login到 URL,但这没有效果。

我需要进行其他设置吗?我查看了旧门户(Microsoft 应用程序注册门户)和新门户(Azure 门户中的应用注册(预览版)),但找不到会在每次登录时禁用同意提示的设置。

标签: azureazure-active-directory

解决方案


您看到的行为是由于您使用的回复 URL 的方案不是“http”或“https”(在您的情况下为“urn”)。在这种情况下,Microsoft 帐户将要求用户确认应用程序请求的委派权限,即使这些权限之前已被授予。此附加提示有助于确保用户知道该应用程序标识为哪个应用程序。

在大多数本机客户端应用程序场景中,这应该不是一个重大问题。它将在初始登录应用程序期间添加一个额外步骤,但在那之后,应用程序应该能够使用刷新令牌来获取大多数令牌。(有时,应用程序可能需要再次触发交互式登录,但这种情况比较少见。)

如果您仔细观察,您会发现最初的同意提示(“...需要您的许可...”)和随后的确认提示(“...需要您确认其许可... ...”)。

初始同意提示 随后的同意提示


推荐阅读