应用程序身份-应用程序ID和访问令牌之间的关系

时间:2019-03-14 00:49:06

标签: azure asp.net-core oauth-2.0 azure-active-directory

我是OAuth的新手,我正在使用OAuth进行应用程序身份/ client credential工作流程。基本上会有一个客户端应用程序使用客户端应用程序的应用程序ID调用API。该API将信任有权访问客户端应用程序的任何人。 enter image description here

我对实现的理解是:

  1. 将客户端应用注册到Azure AD
  2. 将客户端应用的应用ID放入API
  3. 启用OAuth请求,以便客户端应用能够从AAD接收访问令牌
  4. 使用访问令牌来调用API

但是我的困惑是Web应用程序的应用程序ID和访问令牌之间的关系。我知道我们必须将客户端的应用程序ID放入API,以便API能够以某种方式识别客户端应用程序。 API如何知道来自该特定应用程序ID的访问令牌?它如何正常工作?

2 个答案:

答案 0 :(得分:1)

应用程序ID也称为客户端ID,它代表一个客户端应用程序,代表资源所有者发出受保护的资源请求。

客户端应用程序对资源所有者进行身份验证并获得其授权,然后授权服务器将向客户端应用程序颁发访问令牌。

有关该关系的更多详细信息,您可以查看Azure Active Directory developer glossary

更新

例如,我使用客户端凭据流来获取MS Graph API的访问令牌。然后,我在https://jwt.io/中对其进行解码。您将找到声明fop =new FileOutputStream(file, true); append"aud": "https://graph.microsoft.com/",有关更多详细信息,请参见Claims in access tokens

您使用访问令牌调用MS Graph API,它将根据您的要求知道访问令牌来自该特定客户端应用程序。

enter image description here

答案 1 :(得分:1)

为此有专用的协议/验证机制。一旦在资源服务器上收到令牌(例如:-如您的示例中的API),它就可以执行令牌自省以标识令牌的上下文。 OAuth 2.0 Token Introspection定义自省请求的构建方式以及对响应的期望。

  

此规范定义了允许授权的协议      受保护的资源以查询授权服务器以确定      给定令牌提供给他们的元数据集      OAuth 2.0客户端。

通读introspection response section以确定它将返回哪种数据。客户ID也是有效的声明。

现在也有另一种方法。这就是Azure AD所采用的。 Azure Active Directory使用JWT格式的访问令牌。

Azure Active Directory access tokens

  

访问令牌使客户端可以安全地调用Azure保护的API。 Azure Active Directory(Azure AD)访问令牌是JWT,Azure签名的Base64编码的JSON对象。客户端应将访问令牌视为不透明的字符串,因为令牌的内容仅用于资源。

JWT令牌是自包含的,这意味着持有者/接收者可以验证令牌的完整性并验证声明是否有效。通过token validation section进行解释,该过程说明了完整的过程。您必须关注的一项关键声明是audience声明。这表示JWT的目标受众,并且可以具有多个值(数组)。