gpt4 book ai didi

azure - Azure API 管理服务中的 "JWT Validation Failed: JWT not present.."

转载 作者:行者123 更新时间:2023-12-04 08:22:23 27 4
gpt4 key购买 nike

作为引用,我尝试重现此处讨论的解决方案:https://www.tech-findings.com/2020/02/securing-logic-app-with-azure-active-directory.html使用 API 管理来保护 Azure 逻辑应用。

我收到 JWT 错误。当我在浏览器中访问应用程序网址时,它给出:

{ "statusCode": 404, "message": "Resource not found" }

在 API 管理服务测试中我得到:

HTTP/1.1 401 Unauthorized

跟踪显示:

validate-jwt (-0.111 ms)
{
"message": "JWT Validation Failed: JWT not present.."
}

我做了一些谷歌搜索并尝试了以下解决方案: JWT validation failure error in azure apimhttps://learn.microsoft.com/en-us/answers/questions/108008/azure-apim-jwt-token-validation-policy.html

以下是 API 管理设计的入站策略:

<policies>
<inbound>
<base />
<set-method id="apim-generated-policy">POST</set-method>
<rewrite-uri id="apim-generated-policy" template="/request/paths/invoke//?api-version=2016-06-01&amp;sp=/triggers/request/run&amp;sv=1.0&amp;sig={{[[LOGIC APP NAME]]_request-invoke_XXXXXXXXXXXXXXXXXXXXXXXX}}" />
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Request is not authorized or token failed" require-expiration-time="false" require-scheme="Bearer" require-signed-tokens="true">
<openid-config url="https://login.windows.net/[[TENANT NAME]].onmicrosoft.com/.well-known/openid-configuration" />
<audiences>
<audience>[[THE ID OF A REGISTERED APP]]</audience>
</audiences>
</validate-jwt>
<set-header name="Authorization" exists-action="delete" />
<set-header name="apim-generated-policy" exists-action="delete" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>

这是注册应用程序的 list :

{
"id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": 2,
"addIns": [],
"allowPublicClient": null,
"appId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"appRoles": [],
"oauth2AllowUrlPathMatching": false,
"createdDateTime": "2020-12-22T19:48:36Z",
"disabledByMicrosoftStatus": null,
"groupMembershipClaims": null,
"identifierUris": [
"api://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
],
"informationalUrls": {
"termsOfService": null,
"support": null,
"privacy": null,
"marketing": null
},
"keyCredentials": [],
"knownClientApplications": [],
"logoUrl": null,
"logoutUrl": null,
"name": "LabsTestApp",
"oauth2AllowIdTokenImplicitFlow": false,
"oauth2AllowImplicitFlow": false,
"oauth2Permissions": [],
"oauth2RequirePostResponse": false,
"optionalClaims": null,
"orgRestrictions": [],
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [],
"preAuthorizedApplications": [],
"publisherDomain": "[[TENANT NAME]].onmicrosoft.com",
"replyUrlsWithType": [],
"requiredResourceAccess": [],
"samlMetadataUrl": null,
"signInUrl": null,
"signInAudience": "AzureADandPersonalMicrosoftAccount",
"tags": [],
"tokenEncryptionKeyId": null
}

希望您能提供帮助 - 为我指出正确的方向。

最佳答案

对于此问题,您的步骤中存在多个问题。

1.您提到了错误{ "statusCode": 404, "message": "Resource not found" }当您在浏览器中请求 url 时。原因是当您在浏览器中请求它时,它会请求 Get方法,但 url 应使用 Post 进行请求方法。所以它显示404 not found .

2. 当您在 API 管理服务中测试时,它显示 401 Unauthorized 。出现此错误的原因是您没有提供访问 token 或您提供的访问 token 无效。 document中的步骤您提到的不完整,请引用以下步骤:

1).首先,请确保您已完成所提供文档中的所有步骤。

2).然后转到您在azure ad中注册的应用程序并点击“Manifest”选项卡,在“Manifest”的json中添加一个appRole。 enter image description here您可以为该角色指定一个名称(任何您想要的名称),我将该角色命名为 Writer如上面的截图所示。您还可以指定一个“id”(GUID 格式)作为id 的值。 appRole 中的字段。关于添加appRole的更多详情可以引用这个document .

3).您需要在azure ad中注册另一个应用程序作为客户端应用程序。执行与文档所示相同的注册操作来注册其他应用程序,我注册了该应用程序并命名为 huryGetToken4 。进入该应用,点击“API权限”选项卡,点击“添加权限”,找到您注册的原应用,然后添加权限 Writerenter image description here enter image description here

添加Writer后权限,您还需要点击“授予 xxx 管理员同意”。 enter image description here

然后单击“证书和 secret ”选项卡,单击“新建客户端 secret ”以生成客户端 secret 。复制此 secret ,因为它只会显示一次。 enter image description here

4).然后您需要获取访问 token ,请引用下面的屏幕截图来请求访问 token 。 enter image description here在上面的屏幕截图中,您需要替换 <tenant id>主机 URL 中包含您的租户 ID。并且还需要输入前三个参数。最后一个参数grant_type是静态的。

5).请求访问 token ,您将得到如下屏幕截图所示的响应。 enter image description here复制 access_token 的值并将其粘贴到此 page要解码 token ,您可以看到声明 rolesWriter其中的许可。此声明是您需要在 <validate-jwt> 中检查的内容。 APIM 中的策略。 enter image description here

6)。转到您的 apim 并单击 pencil validate-jwt的图标政策。 enter image description here

7)。编辑“Reauired Claims”,如下面的屏幕截图所示: enter image description here

8)。之后,您可以在APIM服务中测试api。添加带有键的 header :Authorization ,值:Bearer <your access token> (请注意 Bearer 和访问 token 之间有一个空格)。 enter image description here

关于azure - Azure API 管理服务中的 "JWT Validation Failed: JWT not present..",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65440505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com