0

我们有一个简单的 Web 应用程序,我正在尝试在它之上使用 Azure API 管理。现在,我正在将我们的 Web 应用程序产品的 CName 重定向到 apim url。

我们的 Web 应用程序是第一方应用程序,它从Microsoft.Identity.Webnuget 包执行 AAD 身份验证并获取 access_token,如下所示:

string accessToken = tokenAcquisition.GetAccessTokenForUserAsync(new[] { Configuration["Scopes:<product>"] }).GetAwaiter().GetResult();

现在,我将所有流量(GET /* 和 POST /*)从 CName 重定向到 apim url

没有 APIM 的使用,我们的网络调用(成功)看起来像这样: 没有 APIM

然而,在添加 APIM 层后,我们的网络调用看起来像这样: 使用 APIM

不知何故,/signin-oidc请求将调用重定向到login.microsoftonline.com/..而不是授权请求并重定向回'/'调用者页面的根(路径:)。

我们得到重复循环:

apim-url => login.microsoftonline.com/consumers/.. => login.live.com/... => apim-url/signin-oidc =>  login.microsoftonline.com/consumers => ...

我不确定重定向是否无法正常工作或身份验证是否无法正常工作。

任何线索都会有所帮助,

谢谢,

马尼沙

4

2 回答 2

0

我不知道您为什么会出现这种行为,但是,身份验证循环通常来自错误的 redirectUrl。

您正在使用 dns 重定向,因此您应该将门户中的 2 Redirect Url 添加到 AAD:

apim-url/signin-oidc 和 [yourdomain]/signin-oidc

于 2021-07-08T14:33:33.497 回答
0

我只是从头开始尝试:

  • 创建 azure api 管理服务

  • 添加网关 - 让我们称之为“我的网关”

  • 添加一个 Api(我选择了一个带有 AAD 身份验证的 Azure 函数)我们称之为“my-api”

  • 在 API 的设置(API => my-api => 设置)中,我删除了请求的订阅(仅用于测试)并检查无用户授权(因为在我的测试中负责的是我的函数,而不是网关)

现在我在我的 Http 客户端(对我来说是 Advance REST 客户端)中测试调用网关:

https://my-gateway.azure-api.net/my-api

在标题中我添加:授权:承载 [xxxx - 安全令牌]

如果所有 AAD 配置都正常,它会正常工作(它适用于我)

如果不是,您的 pb 在您的 api 的 AAD 配置中(或者在您的 API 代码中的 AuthO/OpenId 的一些错误实现中)

如果可能,请与我们分享您 API 中安全部分的一些代码。

于 2021-07-13T14:43:37.343 回答