我是OAuth的新手,我正在使用OAuth进行应用程序身份/ client credential工作流程。基本上会有一个客户端应用程序使用客户端应用程序的应用程序ID调用API。该API将信任有权访问客户端应用程序的任何人。
我对实现的理解是:
但是我的困惑是Web应用程序的应用程序ID和访问令牌之间的关系。我知道我们必须将客户端的应用程序ID放入API,以便API能够以某种方式识别客户端应用程序。 API如何知道来自该特定应用程序ID的访问令牌?它如何正常工作?
答案 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,它将根据您的要求知道访问令牌来自该特定客户端应用程序。
答案 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的目标受众,并且可以具有多个值(数组)。