oauth2-proxy 接入 Bitbucket Cloud 认证OAuth 消费者配置与团队/仓库访问限制实战【免费下载链接】oauth2-proxyA reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.项目地址: https://gitcode.com/GitHub_Trending/oa/oauth2-proxy导读本文基于 oauth2-proxy 项目 v7.6.x 版本文档完整讲解如何将 Bitbucket Cloud 作为身份提供商IdP接入 oauth2-proxy从在 Bitbucket 侧创建 OAuth 消费者、配置回调地址与权限到通过命令行参数完成最小可用部署再到使用--bitbucket-team与--bitbucket-repository把登录范围精确限制到指定团队或仓库成员。读完本文你将掌握 Bitbucket 认证接入的完整配置链路并理解其底层基于 Bitbucket REST API 的鉴权校验原理。1. 前置准备在 Bitbucket Cloud 上创建 OAuth 消费者oauth2-proxy 的 Bitbucket 提供程序基于 Bitbucket Cloud 的 OAuth 2.0 机制工作。在配置 oauth2-proxy 之前需要先在 Bitbucket 侧完成消费者Consumer注册。1.1 创建消费者的关键步骤进入 Bitbucket 的 OAuth 消费者管理页面新建Add a new一个 OAuth consumer。在Callback URL回调地址中填写 oauth2-proxy 实际对外暴露的回调端点https://oauth2-proxy/oauth2/callback其中oauth2-proxy替换为 oauth2-proxy 实际运行所对应的主机名。注意oauth2/callback路径是 oauth2-proxy 内建的回调端点必须与此保持一致。在Permissions权限部分勾选以下项缺一不可Account - Email用于读取用户的主邮箱oauth2-proxy 依赖该邮箱完成用户身份识别对应源码中GetEmailAddress对/2.0/user/emails的调用Team membership - Read用于团队归属校验若启用--bitbucket-team限制则必须开启Repositories - Read用于仓库访问校验若启用--bitbucket-repository限制则必须开启。创建完成后记录页面给出的 Client ID客户端 ID与 Client Secret客户端密钥后续配置 oauth2-proxy 时会用到。1.2 回调地址与权限的底层对应关系从源码 providers/bitbucket.go 可以看到Bitbucket 提供程序内置了三个默认端点登录端点Login URLhttps://bitbucket.org/site/oauth2/authorize令牌兑换端点Redeem URLhttps://bitbucket.org/site/oauth2/access_token用户信息校验端点Validate URLhttps://api.bitbucket.org/2.0/user/emails。上述权限勾选正是为了让 oauth2-proxy 能够通过后两个 API 完成用户邮箱获取、团队与仓库校验测试用例 providers/bitbucket_test.go 也验证了这三个默认 URL 的取值。2. 最小可用配置通过命令行参数启用 Bitbucket 提供程序在 oauth2-proxy 启动参数中传入以下三个选项即可启用 Bitbucket 认证--providerbitbucket --client-idClient ID --client-secretClient Secret其中--providerbitbucket声明使用 Bitbucket 提供程序该值在 pkg/apis/options/providers.go 中被定义为BitbucketProvider ProviderType bitbucket并在 providers/providers.go 中路由到NewBitbucketProvider构造器--client-id/--client-secret即第 1 步在 Bitbucket 控制台获取的凭证对应 pkg/apis/options/legacy_options.go 中的ClientID与ClientSecret字段若不想在命令行明文暴露密钥也可改用--client-secret-file文件路径从文件中读取。2.1 默认行为说明在未附加任何限制参数的情况下任何持有 Bitbucket 账号的用户都可以完成认证登录。这一点在原文档中已明确说明其原因是NewBitbucketProvider构造器providers/bitbucket.go仅在opts.Team与opts.Repository非空时才追加对应的校验逻辑否则只做邮箱确认默认 scope 为email。3. 访问控制限制登录用户到团队或仓库成员默认“人人可登录”仅适合内网或全公开场景。原文档提供了两个访问控制开关--bitbucket-teamTeam name仅允许指定团队的成员登录--bitbucket-repositoryRepository name仅允许对指定仓库拥有访问权限的用户登录。3.1 命令示例--providerbitbucket --client-idClient ID --client-secretClient Secret --bitbucket-teammy-company-team --bitbucket-repositorymy-company/private-repo--bitbucket-repository的值需要按owner/repo工作区/仓库名格式填写因为源码中会通过strings.Split(p.Repository, /)[0]取斜杠前的部分作为查询仓库属主见 providers/bitbucket.go。3.2 参数定义与 Scope 自动扩展这两个参数对应 pkg/apis/options/legacy_options.go 中的BitbucketTeam与BitbucketRepository字段官方 flag 描述分别为 “restrict logins to members of this team” 与 “restrict logins to user with access to this repository”。启用任一限制后提供程序会自动扩展 OAuth scope设置团队时setTeamproviders/bitbucket.go会把 scope 从默认的email扩展为email team设置仓库时setRepositoryproviders/bitbucket.go会把 scope 扩展为email repository两者同时设置时最终 scope 为email team repository。单元测试 providers/bitbucket_test.go 分别验证了这两种 scope 扩展行为email team与email repository。3.3 校验流程的底层实现以GetEmailAddress方法providers/bitbucket.go为核心的鉴权流程如下携带access_token请求ValidateURL/2.0/user/emails获取用户邮箱列表若配置了团队请求/2.0/teams?rolememberaccess_token...遍历返回的values[].username匹配到配置的团队名则通过否则打印team membership test failed, access denied并拒绝登录若配置了仓库请求/2.0/repositories/owner?rolecontributorqfull_namerepoaccess_token...在返回的values[].full_name中精确匹配配置值匹配失败则打印repository access test failed, access denied并拒绝登录最终从邮箱列表中取出is_primary为 true 的主邮箱作为登录身份返回。上述任意一步失败都会导致认证不通过测试用例 providers/bitbucket_test.go 通过模拟后端验证了“仅邮箱”“邮箱 团队归属”两种场景的成功路径以及错误 token、空邮箱等失败场景。4. 通过 YAML 配置alpha 配置格式使用 Bitbucket除了命令行 flagv7.6.x 还支持更结构化的 alpha 配置格式YAML。Bitbucket 相关的配置项定义在 pkg/apis/options/providers.go 与 pkg/apis/options/providers.go 中结构如下providers: - id: bitbucket provider: bitbucket clientID: Client ID clientSecret: Client Secret bitbucketConfig: team: my-company-team repository: my-company/private-repobitbucketConfig下仅有两个可选项team对应命令行--bitbucket-team限制为指定团队成员repository对应命令行--bitbucket-repository限制为指定仓库访问者。两者均可省略省略即表示不限制。命令行 flag 形式在启动时同样会转换到该结构见 pkg/apis/options/legacy_options.go 的映射逻辑因此两种配置方式效果等价。5. 常见问题与注意事项回调地址不匹配导致授权失败Bitbucket 侧填写的 Callback URL 必须与 oauth2-proxy 实际监听的https://主机名/oauth2/callback完全一致协议、域名、路径均需匹配。权限缺失导致校验接口返回 403/401若未勾选 “Team membership - Read” 或 “Repositories - Read”团队/仓库校验请求会被 Bitbucket API 拒绝用户将无法登录。仅在不需要对应限制时可省略对应勾选。仓库名格式--bitbucket-repository必须使用workspace/repo_slug格式代码依赖斜杠拆分确定仓库属主格式错误将导致查询结果无法匹配。默认开放风险未配置--bitbucket-team/--bitbucket-repository时任意 Bitbucket 账号均可登录生产环境请务必配合访问控制参数使用。6. 参考实现与延伸阅读提供程序核心实现providers/bitbucket.go覆盖构造器、scope 扩展与邮箱/团队/仓库校验全流程单元测试providers/bitbucket_test.go覆盖默认 URL、scope 调整、覆盖 URL 与鉴权成功/失败路径参数定义pkg/apis/options/providers.goYAML 结构、pkg/apis/options/legacy_options.goflag 定义提供程序工厂注册providers/providers.go。如需了解 oauth2-proxy 全局配置监听端口、上游、Cookie、会话等可继续阅读 docs/versioned_docs/version-7.6.x/configuration/overview.md 与 docs/versioned_docs/version-7.6.x/configuration/alpha_config.md。【免费下载链接】oauth2-proxyA reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.项目地址: https://gitcode.com/GitHub_Trending/oa/oauth2-proxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
