情况为API的应用程序内注册添加其他作用域,但不会自动触发用户同意屏幕。
当用户先前已经同意时,他们不会再次重定向到同意屏幕。
我可以在各种网站帖子中看到对选项的引用。Prompt=";同意";但不确定如何在启动文件中添加条件逻辑。
如果应用程序得到增强并添加到应用程序注册中,我如何检测是否添加了新的作用域,并且在新作用域的情况下仅添加选项提示重定向到同意屏幕,而不是每次登录时?
.AddMicrosoftIdentityWebApp(选项=>配置绑定("AzureAd",选项);
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应用程序对应的服务主体(即企业应用程序),在门户中导航到与AD应用程序相对应的企业应用程序->Permissions
,您将找到用户同意的权限。
因此,当同一用户再次登录应用程序时,默认情况下不会促使用户再次同意相同的权限,因为权限已经授予了服务主体,就像AD应用程序中添加了新的权限一样->API permissions
,则它将促使用户再次同意新的权限。
对于你的要求,如果你想让用户知道应用程序要求的权限,只同意一次就足够了,我认为你不需要让他一次又一次地同意。使用options.Prompt = "consent"
时也不需要检测是否添加了新的作用域,因为它会让用户自动同意新的权限。总之,我认为你不需要做任何额外的事情,azure的默认行为就足够了。