Azure 身份验证 .net 核心用户同意

发布时间:2021-03-08 17:03

情况 在应用注册中为 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);
        })
    );
回答1

当用户同意权限时,本质上是将权限授予用户登录的AD App对应的服务主体(即企业应用),在门户中导航到AD App对应的企业应用-> Permissions,您将找到用户同意的权限。

所以当同一个用户再次登录app时,默认情况下不会促使用户再次同意相同的权限,因为权限已经授予了服务主体,只要有新的权限添加到AD App -> API permissions,然后它会促使用户再次同意新的权限。

对于你的要求,如果你想让用户知道应用程序要求的是什么权限,一次同意就足够了,我认为你不需要让他一次又一次地同意。也不需要检测在使用 options.Prompt = "consent" 时是否添加了新的作用域,因为它会让用户自动同意新的权限。总之,我认为您不需要做任何额外的事情,azure 的默认行为就足够了。