正确处理 Azure AD Open ID Connect 的增量同意

Correctly handling Incremental Consent for Azure AD Open ID Connect

我有一个在 Azure AD 中注册的应用程序。我想使用增量同意,这样用户就不必事先同意所有权限。我试图使用 ConfidentialClientApplication class 来生成 URL。这工作正常,但之后,用户被重定向回 /signin-oidc。这很好,因为我可以在初始重定向中提供 URL 让用户回到他们需要的地方。

问题是 /signin-oidc 端点抛出一个错误,指示未找到关联 ID。我假设它正在 cookie 中寻找这个值。我开始沿着创建 cookie 的道路前进,但这对我来说似乎很脆弱(如果 OIDC 库在未来的版本中改变它创建 cookie 的方式怎么办)。我觉得我应该能够 return 一个特定的 IActionResult (或类似的东西)向 OIDC 中间件发出信号,表明该应用程序需要用户的额外权限(并且 OIDC 中间件将发出重定向和正确处理 Azure AD 的结果)。

我走错路了吗?我还没有在网上找到任何好的例子。

我终于找到了一个很好的例子。简短的回答是return一个ChallengeResult。使用带有 AuthenticationProperties 对象的重载(如果在 Controller 中则使用方法,如果在其他地方则使用构造函数)。

最重要的部分是使用 SetParameter,键为 "scope",值为您需要的范围列表。

在这个例子中,作者将逻辑包装在一个属性中: https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/blob/master/Microsoft.Identity.Web/AuthorizeForScopesAttribute.cs