如何让 Azure OIDC 尊重我的重定向 URI?

Posted

技术标签:

【中文标题】如何让 Azure OIDC 尊重我的重定向 URI?【英文标题】:How to get Azure OIDC to respect my redirect URI? 【发布时间】:2021-07-09 01:07:08 【问题描述】:

我有一个使用 Open ID Connect 进行身份验证的应用托管在 Azure PaaS 上。

应用 URL 如下:https://env.app.entity.my.domain Azure ASE 是:https://entity-app-env-web.webenvase.my.domain

只要我在 Azure 中为 https://entity-app-env-web.webenvase.my.domain/signin-oidc 配置重定向 URI,它就可以工作。那是因为它在我的设置中忽略了重定向 URI。但这不是我想要的。我显然想将用户返回到应用程序的 URL。

无论我为RedirectUriCallbackPath 设置什么值,它都默认为ASE URL。我该如何解决?

appsettings.json:

"AzureAd": 
  "Instance": "https://login.microsoftonline.com/",
  "Issuer": "https://sts.windows.net/<tenant id>/",
  "Domain": "my.azure.domain",
  "TenantId": "<tenant id>",
  "ClientId": "<client id>",
  "RedirectUri": "https://env.app.entity.my.domain/signin-oidc"

Startup.cs(身份验证配置):

services.AddMicrosoftIdentityWebAppAuthentication(Configuration);
services.AddControllersWithViews(options =>

    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireRole(Role.Administrator)
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
)
.AddMicrosoftIdentityUI();

【问题讨论】:

为什么不将https://env.app.entity.my.domain/signin-oidc 添加到 Azure? @CarlZhao,它就在那里;没关系。将上述配置与 Azure 中配置的重定向 uri 一起使用,身份验证将 https://entity-app-env-web.webenvase.my.domain/signin-oidc 作为 redirect_uri 查询参数传递。 您的意思是即使RedirectUriAzure portalappsettings.json 中配置为https://env.app.entity.my.domain/signin-oidc。但它仍然会重定向到https://entity-app-env-web.webenvase.my.domain url? @CarlZhao,没错。 这很奇怪。如果在 Azure 中删除 https://entity-app-env-web.webenvase.my.domain 然后添加 https://env.app.entity.my.domain/signin-oidc 会怎样? 【参考方案1】:

我从answer 和其他地方发现重定向 uri 是自动计算的,而不使用配置中的值。配置中的那个将在某些情况下使用,但不适用于对 Azure 的身份验证调用。

在摸索了一段时间后,我们的服务器团队开始删除 f5 上的规则,我们发现问题在于我们的其他应用程序典型的标头重写规则。具体来说,它导致 auth cookie 在重定向期间被拒绝并在浏览器中剥离。

我们删除了规则,一切都恢复正常了。

【讨论】:

以上是关于如何让 Azure OIDC 尊重我的重定向 URI?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 中 Spring Boot 应用程序的重定向/会话问题

有啥方法可以让浏览器页面避免 Pyqt5 中的重定向?

Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)

Keycloak:使用 nginx 后面的 javascript 适配器的重定向循环

Azure AD B2C:请求中的重定向 URI 与授权给 OAuth 客户端的不匹配

如何让 pycharm 确认从移动应用程序到移动浏览器的重定向已完成?