使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

     2023-03-25     81

关键词:

【中文标题】使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证【英文标题】:Authenticate Azure API Management with OAuth2 using Azure AD 【发布时间】:2021-04-04 09:18:00 【问题描述】:

我正在尝试通过阅读文章通过 AzureAD 使用 OAuth2 保护 APIM API:Protect a web API backend in Azure API Management by using OAuth 2.0 authorization with Azure AD

AzureAPIM - OAuth2

授权端点 URL (v1):https://login.microsoftonline.com/tenant/oauth2/authorize 令牌端点 URL (v1):https://login.microsoftonline.com/tenant/oauth2/token 客户端 ID:客户端应用 ID 重定向 URI:(已弃用的门户):https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback

AzureAD - 后端应用:

范围:Files.All

AzureAD - 客户端应用程序:

密钥:xxx 重定向网址:仅适用于 APIM 中已弃用的门户 (https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback)

对于演示会议 API,将验证 JWT 策略添加到入站处理,其中 3a0cf09b- 是租户 ID,b7c31179- 是后端应用程序 ID:

在开发者门户中,对 AzureAD 的身份验证成功并返回令牌:

但是调用 API 授权失败:

查看jwt.io中收到的token,发现"aud": "00000003-0000-0000-c000-000000000000"不是backend-app application id:


  "aud": "00000003-0000-0000-c000-000000000000",
  "iss": "https://sts.windows.net/3a0cf09b-xxx/",
  "app_displayname": "client-app",
  "appid": "05a245fb-xxx",
  "scp": "Files.Read User.Read profile openid email",
  "tenant_region_scope": "OC",
  "tid": "3a0cf09b-2952-4673-9ace-0e1bf69ee23a",
  "unique_name": "user1@xxx.onmicrosoft.com",

API 测试 HTTP 响应跟踪显示 validate-jwt 上的错误:

validate-jwt (-0.138 ms)

    "message": "JWT Validation Failed: Claim value mismatch: aud=b7c31179-xxx.."

aud 替换为令牌00000003-0000-0000-c000-000000000000 中的值或删除validate-jwt 策略中的required-claims 以使其正常工作。

有什么想法吗?

【问题讨论】:

【参考方案1】:

从你的报错来看,确实是401错误,也就是你的aud与你要调用的api不匹配,我用auth code flow给你做个简单的演示:

先暴露后端应用的api,添加客户端应用。

接下来,在“API 权限”下,让您的前端应用程序访问您的后端 api:

在“API 权限”下点击“添加权限”,然后点击“我的 API”选项卡。 找到您的后端应用程序并选择适当的范围。 点击“添加权限”。 为您的 API 授予管理员许可。

获取令牌:

解析令牌:

【讨论】:

谢谢卡尔。确认它正在使用 v2。为了测试,我手动从login.microsoftonline.comtenant/oauth2/v2.0/authorize 获得了authorization code,然后通过 Postman 从login.microsoftonline.comtenant/oauth2/v2.0/token 获得了access token【参考方案2】:

您似乎选择了OAuth2授权的v1端点而不是v2端点,因此访问令牌中aud的值应该像b7c31179-xxxx....而不是api://b7c31179-xxxx....。所以你获取访问令牌的步骤没有错误。

根据我这边的一些测试,这个问题的原因是你在 APIM 中配置 OAuth2.0 时没有指定参数resource 的值为 backend-app 应用程序 id。您所指的document 也提到了这一点(我测试时未指定此参数,它显示与您相同的问题)

因此,要解决此问题,请转到您的 APIM 并单击“OAuth 2.0”选项卡,编辑您创建的项目。添加参数resource,其值为后端应用程序ID。

注意:当您添加参数resource并点击“保存”按钮时,请再次打开该项目并检查“Client secret”框是否为空.当我在我这边测试时,添加参数resource后,“Client secret”框显示为空,这可能是该页面上的错误。如果“Client secret”为空,则在开发者门户中获取访问令牌时可能会显示The request body must contain the following parameter: 'client_assertion' or 'client_secret' 之类的错误消息。

【讨论】:

谢谢你。忘记在 APIM OAuth2 (v1) 中添加 resource=backend app id

使用 oAuth 和 SAML 代表 Azure AD

】使用oAuth和SAML代表AzureAD【英文标题】:AzureADOn-Behalf-OfwithoAuth&SAML【发布时间】:2018-06-0304:12:05【问题描述】:我们使用AzureADOn-Behalf-Offlow通过单个API网关将用户连接到多个服务。现在我们想添加另一个服务(Nextcloud,通过LD... 查看详情

oauth2.0 azure AD APIM 在哪里存储令牌

...116:19:46【问题描述】:我在我的APIM中启用了OAuth2.0,我将使用来自KeyValut的客户端ID和密钥从AzureAD生成令牌?我需要知道该令牌在APIM或Azure中的存储位置。因为我假设,可能有许多从客户端API到我们的API的请求,我想要 查看详情

刷新的 OAuth2 令牌具有无效签名 (Azure AD OAuth2)

...令牌过期时,如果会话仍然有效,它会被更新。但是,在使用与原始令牌相同的方法进行验证时,刷新后我从Az 查看详情

如何使用 Azure AD 对 VueJS 应用程序进行身份验证?

】如何使用AzureAD对VueJS应用程序进行身份验证?【英文标题】:HowdoyouauthenticateaVueJSappwithAzureAD?【发布时间】:2017-11-1006:45:41【问题描述】:我正在使用VueJS2.x框架设置应用程序,它需要通过AzureActiveDirectory服务对用户进行身份验... 查看详情

用于多个 WebApi 端点的 Azure AD 不记名令牌?

...ts?【发布时间】:2018-09-2114:16:44【问题描述】:我们正在使用Angular、.NetWebApi和Azure构建多个应用程序。我们一直在做的是通过隐式oAuth2/OIDC授权流通过AzureAD保护应用程序。一切运行良好,但到目前为止我们的架构很简单。IE\'前... 查看详情

通过 restful api 进行 Azure AD 身份验证

...2021-06-1917:21:07【问题描述】:我现在正在通过这两个示例使用AzureAD身份验证,并且一切正常:Sample1Sample2但是有什么方法可以使用如下所示的RESTfulAPI对AzureAD进行身份验证?POSThttps://loginmicrosoft/XX 查看详情

如何在使用我自己的 webapp 时检查用户是不是仍通过 azure sso (oAuth2) 登录?

】如何在使用我自己的webapp时检查用户是不是仍通过azuresso(oAuth2)登录?【英文标题】:Howtocheckifuserstillloggedinviaazuresso(oAuth2),whileusingmyownwebapp?如何在使用我自己的webapp时检查用户是否仍通过azuresso(oAuth2)登录?【发布时间】:2019-... 查看详情

如何使用 OAuth 2.0 通过 Azure Active Directory 对用户进行身份验证?

】如何使用OAuth2.0通过AzureActiveDirectory对用户进行身份验证?【英文标题】:HowtoauthenticateuserwithAzureActiveDirectoryusingOAuth2.0?【发布时间】:2015-04-1906:58:53【问题描述】:我有一个用C#编写的RESTAPI,我需要使用现有的AzureAD服务进行... 查看详情

Azure AD 身份验证令牌未通过 Web api 授权

...问题描述】:我在Azure上有一个需要授权的web-api,我正在使用AzureAD对帐户进行身份验证并生成访问令牌。我可以通过两种不同的方式通过ADAL为同一帐户成功地从AzureAD获取访问令牌,但其中只有一种由web- 查看详情

使用 Azure AD 的 Azure API APP 身份验证

】使用AzureAD的AzureAPIAPP身份验证【英文标题】:AzureAPIAPPauthenticationusingAzureAD【发布时间】:2016-04-0704:56:21【问题描述】:对于Azure中Web/Api应用的设置刀片上的身份验证/授权设置,我有点困惑。如果我通过门户启用AzureAD身份验证... 查看详情

无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证

...eAPI管理后面定义的Azure函数进行身份验证和访问。我已经使用授权码授权对其进行了配置和测 查看详情

Azure AD B2C 受众验证失败

...试对AzureADB2C上的B2CAD租户进行身份验证。我在aspnet.NET6上使用OAuth2.0如果我使用客户端ID请求新的不记名令牌0fdd4f3b-xxxx-xxxx-xxxx-3f84bd9d02ax我得到一个aud值https://my 查看详情

使用 Xamarin Forms 使用自签名证书对 Azure AD 进行身份验证

】使用XamarinForms使用自签名证书对AzureAD进行身份验证【英文标题】:AuthenticatingtoAzureADwithSelfSignedCertificateusingXamarinForms【发布时间】:2018-09-3008:19:26【问题描述】:谁能告诉我如何使用天蓝色自签名证书在XamarinFormsiOS和Android应... 查看详情

是否可以仅请求用户已在 Azure AD OAuth2 隐式流中同意的范围的子集?

】是否可以仅请求用户已在AzureADOAuth2隐式流中同意的范围的子集?【英文标题】:IsitpossibletorequestonlyasubsetofthescopesforwhichauserhasgrantedconsentinAzureADOAuth2implicitflow?【发布时间】:2022-01-1914:27:39【问题描述】:我创建了一个应用注册... 查看详情

配置了 Azure AD RBAC 的 Azure DevOp Pipelines 对 AKS 的身份验证?

...5-2823:07:24【问题描述】:我们已将AzureKubernetes集群配置为使用AzureActiveDirectoryRBAC。这意味着在使用kubectl时,我们首先需 查看详情

如何通过 Azure AD B2C 使用身份验证功能在 Azure Web App 上添加身份验证?

】如何通过AzureADB2C使用身份验证功能在AzureWebApp上添加身份验证?【英文标题】:HowtoaddauthenticationonAzureWebAppusingAuthenticationfeatureviaAzureADB2C?【发布时间】:2021-07-0505:38:36【问题描述】:我想为使用AzureADB2C在AzureWeb应用上运行的Web... 查看详情

使用 Azure Ad 中的服务应用程序限制对组或个人邮箱的访问

】使用AzureAd中的服务应用程序限制对组或个人邮箱的访问【英文标题】:LimitaccesstogroupsorindividualmailboxesusingaserviceapplicationinAzureAd【发布时间】:2016-09-1910:05:43【问题描述】:我有一个Azure集成服务应用程序(守护程序应用程序... 查看详情

通过 Azure AD 验证不透明的访问令牌

】通过AzureAD验证不透明的访问令牌【英文标题】:validateopaqueaccesstokenbyAzureAD【发布时间】:2022-01-1701:23:54【问题描述】:AzureAD是发出不透明的访问令牌还是只发出JWT令牌?如果是,在这种情况下如何验证不透明的访问令牌?因... 查看详情