使用OAuth2.0和AAD登录的Azure API管理会导致重复循环



我们有一个简单的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 => ...

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

任何线索都会有帮助,

谢谢,

Manisha

我不知道你为什么会有这种行为,但身份验证循环通常来自糟糕的重定向URL。

你正在使用dns重定向,所以你应该在门户网站中向AAD添加2重定向Url:

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

我只是从头开始尝试:

  • 创建一个azure api管理服务

  • 添加网关-让我们称之为";我的门户";

  • 添加一个Api(我选择了一个带有AAD身份验证的Azure函数(,让我们称之为";我的api">

  • 在API的设置(API=>my-API=>设置(中,我删除请求的订阅(仅用于测试(,并选中"无"作为"用户授权"(因为在我的测试中负责此项的是我的功能,而不是网关(

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

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

在标题中,我添加:授权:承载[xxxx-Security Token]

如果所有的AAD配置都可以,它会很好地工作(对我来说很好(

若并没有,那个么pb就在api的AAD配置中(或者在api代码中AuthO/OpenId的一些糟糕实现中(

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

最新更新