身份验证
注意本页面假设您已经拥有一个身份提供商 (IdP),例如 Google、Entra ID(以前称为 Azure AD)或 Okta,它处理身份验证过程并返回访问令牌。
了解如何通过网络浏览器让用户从您的扩展程序进行身份验证,然后返回您的扩展程序。
在 OAuth 2.0 中,“授权类型”一词指的是应用程序获取访问令牌的方式。尽管 OAuth 2.0 定义了多种授权类型,但本页面仅描述如何使用授权码授权类型从您的扩展程序授权用户。
授权码授予流程
授权码授权类型由机密客户端和公共客户端用于将授权码换取访问令牌。
用户通过重定向 URL 返回客户端后,应用程序从 URL 获取授权码,并使用它请求访问令牌。

上图显示了
- Docker 扩展请求用户授权访问其数据。
- 如果用户授予访问权限,扩展程序将向服务提供商请求访问令牌,传递用户的访问授权和身份验证详细信息以识别客户端。
- 服务提供商随后验证这些详细信息并返回访问令牌。
- 扩展程序使用访问令牌向服务提供商请求用户数据。
OAuth 2.0 术语
- 身份验证 URL:API 提供商授权服务器的端点,用于检索身份验证代码。
- 重定向 URI:身份验证后重定向到的客户端应用程序回调 URL。此 URL 必须在 API 提供商处注册。
用户输入用户名和密码后,即成功进行身份验证。
打开浏览器页面以验证用户身份
通过扩展程序 UI,您可以提供一个按钮,当选中该按钮时,会在浏览器中打开一个新窗口来验证用户身份。
使用 ddClient.host.openExternal API 在浏览器中打开身份验证 URL。例如
window.ddClient.openExternal("https://authorization-server.com/authorize?
response_type=code
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&redirect_uri=${REDIRECT_URI});获取授权码和访问令牌
您可以通过在您使用的 OAuth 应用程序中将 docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension 列为 redirect_uri,并将授权码作为查询参数连接起来,从扩展程序 UI 获取授权码。然后,扩展程序 UI 代码将能够读取相应的代码查询参数。
重要使用此功能需要 Docker Desktop 中的扩展 SDK 0.3.3。您需要确保在 图像标签 中设置的扩展所需 SDK 版本
com.docker.desktop.extension.api.version高于 0.3.3。
授权
此步骤是用户在浏览器中输入凭据的地方。授权完成后,用户将被重定向回您的扩展程序用户界面,并且扩展程序 UI 代码可以消费 URL 查询参数中作为一部分的授权码。
交换授权码
接下来,您将授权码换取访问令牌。
扩展程序必须向 0Auth 授权服务器发送带有以下参数的 POST 请求
POST https://authorization-server.com/token
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&client_secret=YABbyHQShPeO1T3NDQZP8q5m3Jpb_UPNmIzqhLDCScSnRyVG
&redirect_uri=${REDIRECT_URI}
&code=N949tDLuf9ai_DaOKyuFBXStCNMQzuQbtC1QbvLv-AXqPJ_f注意在此示例中,客户端的凭据包含在
POST查询参数中。OAuth 授权服务器可能要求将凭据作为 HTTP Basic Authentication 标头发送,或者可能支持不同的格式。有关详细信息,请参阅您的 OAuth 提供商文档。
存储访问令牌
Docker Extensions SDK 不提供特定的机制来存储机密。
强烈建议您使用外部存储源来存储访问令牌。
注意用户界面本地存储在扩展程序之间是隔离的(一个扩展程序无法访问另一个扩展程序的本地存储),并且当用户卸载扩展程序时,每个扩展程序的本地存储都会被删除。
接下来做什么
了解如何发布和分发您的扩展程序