- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为引用,我尝试重现此处讨论的解决方案: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 apim和 https://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&sp=/triggers/request/run&sv=1.0&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。 您可以为该角色指定一个名称(任何您想要的名称),我将该角色命名为 Writer
如上面的截图所示。您还可以指定一个“id”(GUID 格式)作为id
的值。 appRole 中的字段。关于添加appRole的更多详情可以引用这个document .
3).您需要在azure ad中注册另一个应用程序作为客户端应用程序。执行与文档所示相同的注册操作来注册其他应用程序,我注册了该应用程序并命名为 huryGetToken4
。进入该应用,点击“API权限”选项卡,点击“添加权限”,找到您注册的原应用,然后添加权限 Writer
。
添加Writer
后权限,您还需要点击“授予 xxx 管理员同意”。
然后单击“证书和 secret ”选项卡,单击“新建客户端 secret ”以生成客户端 secret 。复制此 secret ,因为它只会显示一次。
4).然后您需要获取访问 token ,请引用下面的屏幕截图来请求访问 token 。 在上面的屏幕截图中,您需要替换 <tenant id>
主机 URL 中包含您的租户 ID。并且还需要输入前三个参数。最后一个参数grant_type
是静态的。
5).请求访问 token ,您将得到如下屏幕截图所示的响应。 复制 access_token
的值并将其粘贴到此 page要解码 token ,您可以看到声明 roles
与 Writer
其中的许可。此声明是您需要在 <validate-jwt>
中检查的内容。 APIM 中的策略。
6)。转到您的 apim 并单击 pencil
validate-jwt
的图标政策。
7)。编辑“Reauired Claims”,如下面的屏幕截图所示:
8)。之后,您可以在APIM服务中测试api。添加带有键的 header :Authorization
,值:Bearer <your access token>
(请注意 Bearer
和访问 token 之间有一个空格)。
关于azure - Azure API 管理服务中的 "JWT Validation Failed: JWT not present..",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65440505/
当我尝试输入时,我正在关注 Ray Wenderlich ( https://videos.raywenderlich.com/screencasts/545-server-side-swift-wi
我正在使用 javax.validation.Validation 来验证 jpa 实体。我总是针对相同的实体进行验证。 我想知道是对所有验证使用一个 validator 更好,还是每次验证时实例化一
Controller : @RequestMapping(...) public void foo(@Valid Parent p){ } class Parent { @NotNull // j
在 login.phtml 中,validator 和 validate 之间有什么区别 - 有人可以解释下面每一行的含义 function onepageLogin(button)
我有一个 java bean 用于将 JSON 消息发送到 spring @RestController 并且我有 bean 验证设置并使用 @Valid 运行得很好。但我想转移到 Protobuf/
我正在使用 vee-validate 来验证注册表单,我编写了如下代码,
使用 有什么区别属性和 标签? 我应该什么时候使用哪一种? 最佳答案 validator属性允许您引用独立的托管 bean 方法,而不仅仅是像这样的验证器
我们有这个 Alamofire 错误处理: Alamofire.request(.GET, getUrl("mystuff")).responseData { response in guar
以下代码创建了两个单选按钮。每个选项都包含一个日期值,该日期值已成功转换为格式为“yyyy-MM-dd”的标签。一旦我做出选择并单击下一步按钮,我就会收到以下错误“j_idt12:comDateCho
是否有类似的验证: req.checkBody('property', 'should be present').isPresent(); 值本身并不重要。 现在我使用这个解决方案: .isLengt
系列文章: 1、async-validator 源码学习(一):文档翻译 2、async-validator 源码学习笔记(二):目录结构 3、async-validator 源码学习笔记(三):ru
我正在使用 Backbone.Validation插入。我有一个模型可以在服务器端进行唯一性检查。我如何让 backbone.validation 识别错误并运行我设置的回调以显示返回的错误消息? t
我有一个 Knockout.Validation 场景,我认为该场景相当普遍,但尚未通过在网络上搜索和本网站上的各种答案找到解决方案。 我正在验证的属性在 ajax 调用之后才会添加到可观察到的 kn
我是 Knockout JS 的新手。我需要一个验证器来验证用户将在文本框中输入的日期。为此编写了如下代码 ko.validation.rules['date'] = { validator:
如何在 JSF 验证器中比较两个字符串是否相等? if (!settingsBean.getNewPassword().equals(settingsBean.getConfirmPassword()
我有简单的域: package app class Customers { String CUSTOMER String NOTE static mapping = {
我正在使用 ember-validations 来验证表单中的模型。 如果我使用 createRecord 创建记录,则模型的实例已经过验证,因此在用户输入值之前表单已经显示验证错误。 我只想在提交表
我有两种不同的服务:第一个是将对象保存到数据库,第二个是更新现有对象。 我正在对我的对象使用验证约束,例如(@NotBlank、@Size、@Pattern 等),在第一种情况下,我需要验证对象的所有
我有 2 个 ensure - 验证装饰器用于 2 个字段:password 和 retypePassword。我想在填写 retypePassword 字段时检查这两个字段是否相等。 问题是,当我在
I'm aware that it's a bug ,但是在域类上调用 validate() 会覆盖之前放入的任何拒绝: def save = { def assignment = new A
我是一名优秀的程序员,十分优秀!