当前位置: 首页 > 知识库问答 >
问题:

使用Azure AD通过OAuth2验证Azure API管理

邓崇凛
2023-03-14

我试图通过AzureAD使用OAuth2保护APIM API的安全,方法是阅读文章:使用OAuth 2.0 authorization with Azure AD保护Azure API管理中的web API后端

Azureapim-Oauth2

  • 授权终结点URL(v1):https://login.microsoftonline.com/{tenant}/oauth2/authorize
  • 令牌终结点URL(v1):https://login.microsoftonline.com/{tenant}/oauth2/token
  • 客户端ID:client-app id
  • 重定向URI:(不推荐使用的门户):https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback
    null
  • 密钥:xxx
  • 重定向URL:仅使用APIM中不推荐使用的门户(https://xxx-api.portal.azure-api.net/docs/services/auth1/console/oauth2/authorizationcode/callback)

在jwt.io中检查接收到的令牌时,我发现“aud”:“00000003-0000-0000-c000-000000000000”不是backend-app应用程序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.."
}

共有1个答案

梁存
2023-03-14

看来您选择的是OAuth2授权的v1endpoint,而不是v2endpoint,因此访问令牌中AUD的值应该类似于b7c31179-xxxx....而不是api:/b7c31179-xxx....。因此在获取访问令牌的步骤中没有错误。

注意:当您添加参数resource并单击“保存”按钮时,请再次打开该项,并检查“客户端机密”框是否为空。当我在我这边进行测试时,在add参数resource之后,“client secret”框显示为空,这可能是该页面的bug。如果“client secret”为空,它可能会显示类似的错误消息,当您在Developer Portal中获得访问令牌时,请求正文必须包含以下参数:'client_assertion'或'client_secret'

 类似资料:
  • 我想用节点js验证Azure活动目录中的用户(我是Azure和活动目录的新手),我读了很多留档,有两种方法可以做到这一点。第一:我的Web请求通过Microsoft提供给我的表单进行身份验证,然后用户登录,这重定向到我的URL 第二:(这是我需要的方式)我使用的是Oaust2,带有 我只是关注这个博客:https://blog.jongallant.com/2017/11/azure-rest-a

  • 让OAUTH2和管理endpoint工作的正确方法是什么?

  • 根据developer.yahoo.com/mail/和IMAP的回复: Yahoo Mail可以通过IMAP使用OAuth(2)身份验证访问。 我在https://developer.yahoo.com/apps/上注册了我的应用程序,所以我得到了客户端ID和客户端机密。我没有找到任何与邮件相关的作用域(API权限)。然而,我选择了所有API权限,这是在我注册我的应用程序时提出的。 我尝试实现O

  • 我正在使用Spring Boot构建一个REST Api,我可以使用Oauth2(使用spring-security-oauth2)来保护它。 我想为执行器管理endpoint(度量、健康等)管理一个单独的身份验证和授权模式。 并且我希望管理endpoint运行在不同的端口(application.properties中的management.port=8081)上 我读了很多书,但找不到一个方法

  • 虽然不是EAS 16.1的一部分,但我们还希望注意到Office 365和Outlook.com客户现在都可以通过EAS使用OAuth 2.0协议进行授权。 我的问题是:我应该在oauth请求中使用哪个范围? 有没有一个例子,也许是完整的请求?

  • 我需要在使用PKCE的云运行中验证一个服务帐户(使用容器调用角色)。基本上,我的iOS应用程序发送HTTPS请求来调用特定的云运行容器(使用Django Rest框架)。 我找到了这个示例(它通过自签名的JWT向云运行endpoint进行身份验证,以换取令牌)。这正是我所需要的,但我想添加PKCE。我很困惑,我应该把code_verifier和code_challenge发送到哪里?如果我在容器中