- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个curl 脚本,它从Azure AD 请求新的访问 token 。我需要它为我的 API 返回某种声明,角色或范围都可以。
我可以获得访问 token ,但它不会返回角色声明或范围或任何类似性质的内容。
在 Web API 中使用时
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
我得到:
Neither scope or roles claim was found in the bearer token.
我确实尝试过设置
"AllowWebApiToBeAuthorizedByACL" : true,
在 appsettings.json但它并没有阻止错误的发生,正如它应该做的那样。
这用于在curl脚本和微服务之间进行授权。由于它是后台服务,因此没有用户交互,它只是服务器到服务器的授权。我只是想保护 Web api。因此,出于安全原因,我想确保创建的访问 token 实际上是该系统的访问 token ,这就是为什么我在我的应用程序上寻找某种声明或角色,以确保它不仅仅是来自另一部分的随机访问 token 系统的。
如果没有角色或范围,我的应用程序将引发以下错误
System.UnauthorizedAccessException: IDW10201: Neither scope or roles claim was found in the bearer token.
Oauth2 使用范围来使用户能够授予客户端对其数据的访问权限,因为这不需要我认为我正在寻找的不是范围。我认为我需要的是一种为应用程序本身定义角色的方法。我对 azure 的经验很少,所以如果我错了,请纠正我。
curl -X POST -d "grant_type=client_credentials&client_id=api://a4994a31-c494-4b73-9622-d3a7144abeee&client_secret=[secret]&resource=api://a4994a31-c494-4b73-9622-d3a7144abeee" https://login.microsoftonline.com/1e2ad6d6-274f-43e8-89ef-d36d65bb83b5/oauth2/token
{
"aud": "api://a4994a31-c494-4b73-9622-d3a7144abee",
"iss": "https://sts.windows.net/1e2ad6d6-274f-43e8-89ef-d36d6583b5/",
"iat": 1628506854,
"nbf": 1628506854,
"exp": 1628510754,
"aio": "E2ZgYChZ8/PRc/eJ5sYfulfVXWUrBQA=",
"appid": "a4994a31-c494-4b73-9622-d3a7144abeee",
"appidacr": "1",
"idp": "https://sts.windows.net/1e2ad6d6-274f-43e8-89ef-d36d65bb835/",
"oid": "81f74198-ab14-4b0b-bad6-62893e15f9c8",
"rh": "0.AQsA1tYqHk8n6EOJ79NtZbuDtTFKmaSUxHNLliLTpxRKvu4AAA.",
"sub": "81f74198-ab14-4b0b-bad6-62893e15f9c",
"tid": "1e2ad6d6-274f-43e8-89ef-d36d65bb83b",
"uti": "FaZGzuuRn0eEQYPRReoYAQ",
"ver": "1.0"
}
我尝试设置范围
然后将其添加到curl脚本中
curl -X POST -d "grant_type=client_credentials&client_id=api://a4994a31-c494-4b73-9622-d3a7144abeee&client_secret=[Secret]&resource=api://a4994a31-c494-4b73-9622-d3a7144abeee&scope=api://a4994a31-c494-4b73-9622-d3a7144abeee/load_scope" https://login.microsoftonline.com/1e2ad6d6-274f-43e8-89ef-d36d65bb83b5/oauth2/token
完全没有效果,访问 token 仍然不包含任何范围。
然后我尝试添加角色
添加将角色添加到资源
curl -X POST -d "grant_type=client_credentials&client_id=api://a4994a31-c494-4b73-9622-d3a7144abeee&client_secret=[secret]&resource=api://a4994a31-c494-4b73-9622-d3a7144abeee/load" https://login.microsoftonline.com/1e2ad6d6-274f-43e8-89ef-d36d65bb83b5/oauth2/token
但这只是返回一个错误
{"error":"invalid_resource","error_description":"AADSTS500011: The resource principal named api://a4994a31-c494-4b73-9622-d3a7144abeee/load was not found in the tenant named 1e2ad6d6-274f-43e8-89ef-d36d65bb83b5. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.
我目前正在关注Assign app roles to applications这是 list 。
"appId": "51bdea30-a886-47f7-a27f-994c8caca5c",
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "myapprole",
"displayName": "myapprole",
"id": "bdaa8bc7-e0b3-47b1-b92-9011313e16ae",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "myapprole"
}
],
最佳答案
解决方案是添加AllowWebApiToBeAuthorizedByACL
,这会删除错误消息并允许后端服务无需角色或声明即可进行通信。
System.UnauthorizedAccessException: IDW10201: Neither scope or roles claim was found in the bearer token.
我已经添加了它,但在深入研究 Microsoft.Identity.Web 的源代码后它不起作用。我发现我使用的是旧版本 Microsoft.Identity.Web这显然是在添加 AllowWebApiToBeAuthorizedByACL
检查之前。我删除了 NuGet 包并在 1.15.2 中读取它并且它可以工作。
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[Redacted]",
"ClientId": "[Redacted]",
"TenantId": "[Redacted]",
"AllowWebApiToBeAuthorizedByACL" : true,
"CallbackPath": "/signin-oidc"
},
关于azure - 如何使用 Azure Ad client_credentials 对服务器到服务器通信的后端 Web api 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68711323/
我正在尝试使用 Postman 工具从 Microsoft Graph API 获取 accessToken。我正在使用 Type=oauth2.0 的 Authorization 选项卡中尝试它,以
我的应用程序使用 preauthentication 我想使用 ClientCredentialsResourceDetails(签名提取)使用 OAuth2 protected 资源。 当将此与预身
对于一个项目,我需要显示存储在个人 OneDrive 上的一些文件。 我无法使用经典的 OAuth2 身份验证,我需要作为应用程序而不是用户进行身份验证,如本页所述:https://learn.mic
我已经使用 OAuth2 创建了一个授权服务器,目前,我可以在调用时获得不记名 token : POST /oauth/token?grant_type=client_credentials&
对于一个项目,我需要显示存储在个人 OneDrive 上的一些文件。 我无法使用经典的 OAuth2 身份验证,我需要作为应用程序而不是用户进行身份验证,如本页所述:https://learn.mic
我最近为我的 OAuth2 提供程序实现了 client_credentials 授予,它基于 Spring security OAuth2。然后我转移到客户端来实现该机制。我添加了 @EnableO
我的问题是针对 spring-security 5.1.0 和使用 Spring WebClient 的。我在使用 Spring Boot 2.1.0 的服务器环境中工作。这question可能已经被
我正在尝试使用 Spring Boot 创建仅支持客户端凭据流的 OAuth2 授权。据我了解该流程,客户端直接访问 /oauth/token 端点。 有没有办法在 Spring Boot 中禁用 /
我正在尝试使用 ResourceServerConfigurerAdapter(使用 Oauth2 client_credentials)访问受 Spring Security 保护的 Web 服务
我有一些 API 需要访问 token 才能获得响应。在 postman 中,我们使用 OAuth 2.0 通过提供客户端用户名和密码来获取访问 token 。以类似的方式,我想获取新的访问 toke
我想使用 client_credentials 从 react 性资源服务器访问另一个受 oauth2 保护的资源。我使用颁发的 token 访问资源服务器的部分正在运行,但没有使用 webclien
我正在阅读 OAuth2 规范: https://www.rfc-editor.org/rfc/rfc6749#section-4.4.2 特别是关于 client_credentials 的部分授予
我一直在尝试获取用于 oauth2 身份验证的 token ,以使用以下 Java 代码连接到邮件服务器: public static String getAuthToken(String tenan
我一直在尝试获取用于 oauth2 身份验证的 token ,以使用以下 Java 代码连接到邮件服务器: public static String getAuthToken(String tenan
我想使用 OAuth2 和 Symfony2(实际上是 Symfony3)为我的 API 进行服务器到服务器身份验证。我正在使用 FOSOAuthServerBundle 。 远程服务器不会代表任何用
我的 axios POST 方法无法正常工作。虽然调用语法似乎是正确的,但我想在我的具体情况下存在一些根深蒂固的问题。我正在尝试使用 grant_type=client_credentials 获取访
我正在尝试在 REST API 上注册新用户,请求应该是这样的: POST /api/oauth/token HTTP/1.1 Content-Type: application/x-www-form
我在 google 控制台中创建了一个 clientid 和 clientcredentials。当我使用 grant_type=client_credentials 请求 token 时。我得到了
我正在尝试将 OAuth client_credentials 与 Windows Microsoft Azure 结合使用。我可以成功生成 access_token 但当我尝试访问 https://
我想了解 grant_type=client_credentials 之间的区别和 grant_type=password在Authentication或在 OAuth2 Flow概念。 我正在关注以
我是一名优秀的程序员,十分优秀!