【发布时间】:2019-05-16 03:29:13
【问题描述】:
是否可以使用内置的身份验证/授权选项保护 Azure 内应用服务中的 Web API,同时使用 OAuth 客户端凭据授予流程访问它?
我有一个应用服务正在通过 Azure AD B2C 进行身份验证。在那个 B2C 租户中,我注册了 Web 应用程序/API,并且身份验证可以正常使用 Web 应用程序。 我在该 AD B2C 应用的 Published Scopes 部分中添加了一个范围,还为该范围添加了一个 App ID URI。 然后我在租户中创建了另一个应用程序(ClientApp)来代表我想要提供对第一个 API 的访问的另一个服务。我为它生成了一个密钥,并在 API 访问部分添加了我在另一个应用程序中创建的范围。
然后在邮递员中,我使用下一个获取令牌
- 授权类型:客户端凭据
- 访问令牌 URL:https://login.microsoftonline.com/mytenantname.onmicrosoft.com/oauth2/v2.0/token(出于某种原因,我必须使用 login.microsoftonline,因为 b2clogin 域不适用于此)
- 客户端 ID:显示在为 ClientApp 注册的应用程序中的 ID
- Client secret:ClientApp下生成的secret
- 范围:我添加了 Web 应用注册的应用 ID URI。
我成功获取了令牌,但是当我尝试使用带有邮递员的不记名令牌访问网站时,我只得到 401。
【问题讨论】:
-
是的,你可以。我只是在这里给你一个概述。只需打开 Azure App 服务中可用的“身份验证/授权”,并使用任何服务提供商(例如 AzureAD)对其进行配置,它就会创建服务主体。完成后转到 Azure AD 中的服务主体并获取 ClientID/Secret 以在您的客户端应用程序中使用它们来获取访问令牌。使用访问令牌作为“授权”承载令牌来调用 WebAPI 端点。
-
@Imran 我编辑了我的问题以提供有关我的情况的更多详细信息。我应该在 Azure AD 中而不是在 B2C 租户中注册客户端应用程序,以便按照您所说的进行操作吗?
-
您将向用于保护您的 webapi/webapp 的租户注册客户端应用程序,在您的情况下为 AzureB2C。你使用什么样的客户端?由于注册桌面客户端与 Web 客户端不同。在这里找到更多docs.microsoft.com/en-us/azure/active-directory-b2c/…。关于 401 有很多原因,但大多数时候是因为错误的受众。您可以找到我的答案并打开日志记录以确切了解您收到 401 的原因。stackoverflow.com/a/53591038/1041953
-
客户端应用是另一个应用服务。你的意思是我应该看什么日志? Web api 日志不会包含任何内容,因为我无法通过身份验证,因此该应用程序永远不会受到攻击。
-
对于观众,我所做的是将在 B2C 中注册为客户端应用程序的应用程序的 ID 作为 clientId 输入,并将在该应用程序中生成的秘密作为秘密输入。但也尝试使用主 web api 应用程序的 web 应用程序 id 并为其生成一个秘密,它也不起作用。
标签: azure azure-ad-b2c