通过Azure AD使用客户端凭据保护API

时间:2019-11-30 14:58:13

标签: azure api oauth jwt azure-active-directory

我有一个Azure托管的ASP.NET Core API,将由多个受信任的客户端访问。我希望提供一个/ auth端点,它接受client_id和client_secret。响应将是一个具有有效期限的OAuth访问令牌。

我发现的许多示例/教程都与用户名/密码登录以及完整的OAuth流(B2C)有关,这不是我要查找的,因为受信任的客户端具有秘密。

我一直在寻找Azure API管理,该API链接到用于OAuth的Azure AD,但我认为这只是使事情变得复杂。

过去,我已经使用ASP.NET中间件生成和验证了JWT承载令牌,但是我确定我应该通过Azure AD生成和验证令牌-还是我在这里错了?

[期望得到与明确的代码无关的否决权,但确实需要一点建议才能使我超越这一点]

1 个答案:

答案 0 :(得分:1)

  

我希望提供一个/ auth端点,该端点接受client_id和   client_secret。响应将是一个具有有效期限的OAuth访问令牌。

您可以使用client credential flow。然后,您可以使用此端点获取访问令牌。

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

在执行此操作之前,您需要expose application permissions的应用程序api。 appRoles的内容如下。

"appRoles": [
    {
    "allowedMemberTypes": [ "Application" ],
    "description": "Accesses the TodoListService-Cert as an application.",
    "displayName": "access_as_application",
    "id": "ccf784a6-fd0c-45f2-9c08-2f9d162a0628",
    "isEnabled": true,
    "lang": null,
    "origin": "Application",
    "value": "access_as_application"
    }
],