我有一个本地应用程序(电子),其中集成了Azure AD v2.0登录经验。我们目前仅启用基于Microsoft帐户的登录。
这是我的登录网址,如下所示:
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门户中的应用注册(预览)),但是找不到可以禁用每次登录上的同意提示的设置。
答案 0 :(得分:1)
您看到的行为是由于您使用的答复URL的方案不是“ http”或“ https”(在您的情况下为“ urn”)。在这种情况下,即使以前已授予这些权限,Microsoft帐户也会要求用户确认应用程序正在请求的委派权限。此附加提示有助于确保用户知道该应用程序将其标识为哪个应用程序。
在大多数本机客户端应用程序场景中,这应该不是一个大问题。它将在初始登录应用程序时增加一个额外的步骤,但是在此之后,该应用程序应该能够在大多数令牌获取中使用刷新令牌。 (有时,该应用可能需要再次触发交互式登录,但这很少见。)
如果您非常仔细地查看 ,您会发现初始同意提示(“ ...需要您允许...”和后续确认提示(“ ...需要您确认其对...的许可”。