同意提示不要求AD App中设置的所有权限移至v2.0权限后
Consent prompt does not ask for all permissions which are set in AD App after moving to v2.0 authority
我们有一个多租户 AD 应用程序,我们使用它让用户使用 OpenID Connect 登录到我们的应用程序。我们最近移动到 v2.0 授权端点,post 我们面临一个问题,其中在登录过程中显示的同意提示不显示在 'Permissions' 部分中配置的所有权限的应用程序。这与 v1.0 授权端点的行为不同,后者用于显示所有设置权限的提示。以下是我们 Startup.cs -
中的相关代码片段
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.CallbackPath = new PathString("/callback/");
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.SaveTokens = true;
options.ClientId = <clientId>;
options.Authority = "https://login.microsoftonline.com/common/v2.0/";
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = <valid-issuer>,
IssuerValidator = MultiTenantIssuerValidator.Validate,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = <client-id>,
NameClaimType = "preferred_username"
};
使用 v2.0 端点重定向 URI -
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid 配置文件&response_mode=form_post
使用 v1.0 端点重定向 URI -
https://login.microsoftonline.com/common/oauth2/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid 配置文件&response_mode=form_post
我试图浏览 v2 端点的文档,但没有找到任何解释此行为更改的部分。
我们是否明确应该在 OpenIdConnectOptions 中设置所有必需的范围?
是的。 v1.0 和 v2.0 之间的行为不同。
对于 v2.0 端点,您应该将资源包含在范围内。
例如,如果您的权限是 Microsoft Graph,您应该像这样生成请求 uri:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid profile https//graph.microsoft.com/.default&response_mode=form_post
如果您的许可是针对您的自定义网站 API,您只需将 https//graph.microsoft.com/.default
替换为 api://*****/.default
。
然后它会要求您同意所有权限。
有关详细信息,请参阅 v2.0 示例 Request an authorization code。
在 Azure AD V2.0 中,必须明确请求权限(范围)。它有一个 scope
参数,开发人员应该使用该参数来请求范围。这也意味着一个应用程序不需要在应用程序注册中声明权限。
如果您想要 AAD v1 行为。
- 在 Api 权限 blade.
中声明您的应用需要的权限
- 使用“./default”关键字作为范围。
这里提供了更详细的信息
我们有一个多租户 AD 应用程序,我们使用它让用户使用 OpenID Connect 登录到我们的应用程序。我们最近移动到 v2.0 授权端点,post 我们面临一个问题,其中在登录过程中显示的同意提示不显示在 'Permissions' 部分中配置的所有权限的应用程序。这与 v1.0 授权端点的行为不同,后者用于显示所有设置权限的提示。以下是我们 Startup.cs -
中的相关代码片段.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.CallbackPath = new PathString("/callback/");
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.SaveTokens = true;
options.ClientId = <clientId>;
options.Authority = "https://login.microsoftonline.com/common/v2.0/";
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = <valid-issuer>,
IssuerValidator = MultiTenantIssuerValidator.Validate,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = <client-id>,
NameClaimType = "preferred_username"
};
使用 v2.0 端点重定向 URI - https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid 配置文件&response_mode=form_post
使用 v1.0 端点重定向 URI - https://login.microsoftonline.com/common/oauth2/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid 配置文件&response_mode=form_post
我试图浏览 v2 端点的文档,但没有找到任何解释此行为更改的部分。
我们是否明确应该在 OpenIdConnectOptions 中设置所有必需的范围?
是的。 v1.0 和 v2.0 之间的行为不同。
对于 v2.0 端点,您应该将资源包含在范围内。
例如,如果您的权限是 Microsoft Graph,您应该像这样生成请求 uri:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=&redirect_uri=&response_type=code id_token&scope=openid profile https//graph.microsoft.com/.default&response_mode=form_post
如果您的许可是针对您的自定义网站 API,您只需将 https//graph.microsoft.com/.default
替换为 api://*****/.default
。
然后它会要求您同意所有权限。
有关详细信息,请参阅 v2.0 示例 Request an authorization code。
在 Azure AD V2.0 中,必须明确请求权限(范围)。它有一个 scope
参数,开发人员应该使用该参数来请求范围。这也意味着一个应用程序不需要在应用程序注册中声明权限。
如果您想要 AAD v1 行为。
- 在 Api 权限 blade. 中声明您的应用需要的权限
- 使用“./default”关键字作为范围。
这里提供了更详细的信息