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

Azure应用服务使用客户端凭据轻松认证AADB2C中的授予流

鲜于浩淼
2023-03-14

是否可以使用内置的身份验证/授权选项保护Azure中应用服务中的Web API,同时使用OAuth客户端凭据授予流访问它?

我有一个应用服务正在通过Azure ADB2C进行身份验证。在该B2C租户中,我注册了Web应用/API,并且身份验证工作正常,可以使用该Web应用。我在该ADB2C应用的已发布范围部分中添加了一个范围,并为该范围添加了一个应用ID URI。然后,我在租户中创建了另一个应用(ClientApp),以表示我想要提供对第一个API的访问权限的另一个服务。我为它生成了一个密钥,并且在API访问部分中添加了我在另一个应用中创建的范围。

然后在postman中,我使用next获得令牌

  • 授予类型:客户端凭据
  • 访问令牌URL:https://login.microsoftonline.com/mytenantname.onmicrosoft.com/oauth2/v2.0/token(出于某种原因,我必须使用login.microsoftonline,因为b2clogin域不适用于此)
  • 客户端ID:为ClientApp注册的应用程序中出现的ID
  • 客户端秘密:ClientApp下生成的秘密
  • 范围:我在web应用注册中添加的应用ID URI。

我成功获得了令牌,但当我尝试使用邮递员的不记名令牌访问网站时,我只获得了401。

共有3个答案

戴博
2023-03-14

不知道我是否理解正确,但似乎你正在使用一个网址作为范围。如果您将范围设置为应用程序服务的应用程序id(您可以在azure AD中找到与您的应用程序服务同名的企业应用程序),而不是使用URL,它就可以工作。(格式:/。默认)

我仍在尝试弄清楚是否可以使用URL作为范围……

郎灿
2023-03-14

我花了几个小时来寻找一个合适的解决方案。

该解决方案:https://stackoverflow.com/a/48657826/11721142不适用于我的B2C设置(几乎是理想的:)。我不得不改变原来的:

"additionalLoginParams": [
  "response_type=code id_token",
  "resource=<AAD-app-id-for-your-webapi-webapp>"
]

收件人:

"additionalLoginParams": [
  "scope="scope=https://xxx.onmicrosoft.com/{Guid}/all+openid+offline_access""
]

哪里

< code > https://XXX . on Microsoft . com/{ Guid }/all 是B2C API权限中定义的作用域标识符

然后……最后我可以调用{front ent-app-domain}/. auth/login/aad,然后……请参阅:{front ent-app-domain}/. auth/me之后的访问令牌、id令牌和刷新令牌。

您还可以提供所需的作用域,如下所示:{前端-应用程序-域}/.身份验证/登录/aad?作用域=

丁振海
2023-03-14

不支持对 AAD B2C 应用程序注册使用client_credentials流。因此,必须改为通过普通的 Azure AD 边栏选项卡创建应用注册。
https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-apps#current-limitations

然后,应用服务必须接受来自 2 个不同颁发机构的令牌,而应用服务无法使用 EasyAuth(在“应用服务配置”菜单中启用身份验证)执行此操作。

相反,您需要使用一个可以接受来自多个权威机构的令牌的库。这里有一个例子:< br >使用多JWT载体认证

 类似资料:
  • 我喜欢从我自己的应用程序管理键斗篷:创建用户 请求一个访问令牌,其用户名:密码在标题 但答案是403: 如何/是否可能通过客户端凭据授权从新服务帐户访问Admin REST API?

  • 我可以使用,其中一个keycloak客户机与另一个keycloak客户机通信。然而,只有当我登录到第一个keycloak客户机时,它才起作用,即它向keycloak服务器发送客户机ID、客户机机密、用户名和密码。如果我没有在第一个客户机上使用用户和密码进行身份验证,我会得到“无法设置授权头,因为没有身份验证原则”。但是我已经将keycloak配置为对第一个客户机使用服务帐户(客户机凭据授权),因此

  • 我正在尝试使用 Keycloak 作为 Azure AD 的标识代理,为后端服务使用客户端凭据授予。我还需要将来自外部 IdP 的访问令牌存储在 Keycloak 中,以便从 MS 图形 API 检索组信息。我有这个用例使用授权代码流为机密客户端工作,但我无法让它与客户端凭据授予一起使用。 我在Keycloak中创建了一个“机密”客户端,启用了“服务帐户”。我还在Azure AD中创建了一个应用程

  • 我开发Spring Cloud(使用Netflix OSS堆栈)微服务架构已经有一段时间了。正如您所料,我已经将授权服务器分离为一个独立的微服务。我的前端应用程序使用“密码”授权类型用于用户登录目的。但是,对于从前端服务到其他后端服务的rest调用,我使用的是“Client-Credentials”授权类型。客户机凭据授予类型也在其他后端服务中使用。通过这样做,我无法确定谁是请求的实际调用者(当前

  • 我们有一个第三方移动应用程序。它在登录过程中创建一个访问令牌,以使用授权码授权流访问我们的API(.netcore)之一。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code 该移动应用程序显示了许多互动程序。登录后,当用户单击其中一个互动程序时,我想调用另一个。netcor

  • 我正在玩这里描述的客户端凭据授予流https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365 这是我最初的授权申请:https://login.microsoftonline.com/common/oauth2/authorize?nonce = c43a 377 e-8b