未经授权。访问令牌丢失或无效。 【API管理中的Oauth 2.0授权服务器】

问题描述 投票:0回答:1

我已在 API 管理中配置了版本 v1 的 Oauth 2.0 授权服务器,并且还配置了 API 以使用 OAuth 2.0 用户授权。 在开发者门户上选择 Authotization_code 后,我可以获得令牌。

当我尝试使用生成的令牌请求任何 API 时,我收到 401 响应

我有五个 API,其中一些 API 版本的 API 规范是 v1,有些是 v2,并且所有五个 API 的受众都不同。

"auth": { "audience": [ "api://**************", "9f*****-****-****-****-*******418" ],
我是否需要从授权服务器中的相应 

audience

 指定客户端 ID 和客户端密钥,并将回调 URl 添加到 
audience
 中的相应应用程序(
app registrations->app (which is mentioned in auth->audience)
)?

我是 APIM 新手,有人遇到过这个问题吗?你是如何解决的?

azure oauth-2.0 azure-api-management
1个回答
0
投票
缺少的

访问令牌是一个base64编码值,应以授权标头的形式与API请求一起发送。

Authorization: Bearer XXXXXXXXXXXXXX...


我假设您正在使用 Postman、Fiddler 或类似工具测试功能,但该 API 是供客户端应用程序使用的?

需要在代码中运行时获取token。或者,为了进行测试,您可以向 MS OAuth 2.0 端点发布请求:

标题

POST /YOUR_TENANT_ID/oauth2/v2.0/token HTTP/1.1 Host: login.microsoftonline.com Content-Type: application/x-www-form-urlencoded
身体

grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&scope=api://YOUR_API_ID/.default
如果您还没有 API ID,可以从 API 管理中的门户获取 API ID。

您应该收到如下回复:

{ "access_token": "YOUR_ACCESS_TOKEN", "token_type": "Bearer", "expires_in": 3600, "ext_expires_in": 3600, "scope": "api://YOUR_API_ID/.default" }
获得令牌后,将 XXXXXX... 替换为上面的内容,并将授权令牌包含在您的 API 请求中。

© www.soinside.com 2019 - 2024. All rights reserved.