情况 在应用注册中为 API 添加其他范围不会自动触发用户同意屏幕。
当用户之前同意时,他们不会再次重定向到同意屏幕。
我可以在各种网络帖子中看到对 options.Prompt = "consent" 的引用,但不确定如何在启动文件中添加条件逻辑。
如果应用程序得到增强并将新范围添加到应用注册中,并且仅在新范围的情况下添加选项提示重定向到同意屏幕,而不是在每次登录时,我如何检测是否添加了新范围?< /p>
.AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAd", options);
options.Prompt = "select_account";
if (**how to detect if there are new scopes**)
{
options.Prompt = "consent";
}
options.Events.OnTokenValidated = async context => {
var tokenAcquisition = context.HttpContext.RequestServices
.GetRequiredService<ITokenAcquisition>();
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(async (request) => {
var token = await tokenAcquisition
.GetAccessTokenForUserAsync(GraphConstants.Scopes, user: context.Principal);
request.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", token);
})
);
当用户同意权限时,本质上是将权限授予用户登录的AD App对应的服务主体(即企业应用),在门户中导航到AD App对应的企业应用-> Permissions
,您将找到用户同意的权限。
所以当同一个用户再次登录app时,默认情况下不会促使用户再次同意相同的权限,因为权限已经授予了服务主体,只要有新的权限添加到AD App -> API permissions
,然后它会促使用户再次同意新的权限。
对于你的要求,如果你想让用户知道应用程序要求的是什么权限,一次同意就足够了,我认为你不需要让他一次又一次地同意。也不需要检测在使用 options.Prompt = "consent"
时是否添加了新的作用域,因为它会让用户自动同意新的权限。总之,我认为您不需要做任何额外的事情,azure 的默认行为就足够了。