Hashicorp Vault OIDC 身份验证方法与 Azure AD 错误验证签名

Posted

技术标签:

【中文标题】Hashicorp Vault OIDC 身份验证方法与 Azure AD 错误验证签名【英文标题】:Hashicorp Vault OIDC auth method with Azure AD error validating signature 【发布时间】:2020-05-17 07:14:39 【问题描述】:

我正在尝试使用 JWT/OIDC authentication method 并使用 Azure AAD 作为提供程序来保护保管库 UI 和命令行登录。我正在关注文档,但我以以下错误消息结尾:

Token verification failed. error validating signature: failed to verify signature: failed to verify id token signature

这是我设置身份验证方法所遵循的步骤

    创建了允许我的重定向 URL 的 Azure 应用注册
      http://localhost:8250/oidc/callback https://hostname:port_number/ui/vault/auth/oidc/oidc/callback
    我对 Microsoft Graph API 的应用程序和委派类型拥有 Group.Read.All 权限 从门户生成了一个秘密及其令牌 我正在使用 v2.0 端点https://login.microsoftonline.com/my_tenant_id/v2.0 我将 oidc 范围指定为 https://graph.microsoft.com/.default 我用"groupMembershipClaims": "All",修改了应用清​​单

然后我使用金库上的令牌身份验证登录并发出以下命令行。

vault auth enable oidc
vault write auth/oidc/config @azuread-auth-config.json
# Success! Data written to: auth/oidc/config
vault write auth/oidc/role/default @azuread-default-role-config.json

azuread-auth-config.json 文件有以下内容


    "oidc_discovery_url": "https://login.microsoftonline.com/my_tenant_id/v2.0",
    "oidc_client_id": "my_client_id",
    "oidc_client_secret": "my_client_secret",
    "default_role": "default"

azuread-default-role-config.json 文件有以下内容


    "allowed_redirect_uris": [
        "http://localhost:8250/oidc/callback",
        "https://my_hostname/ui/vault/auth/oidc/oidc/callback",
        "http://localhost:8200/ui/vault/auth/oidc/oidc/callback"
    ],
    "groups_claim": "groups",
    "oidc_scopes": [
        "https://graph.microsoft.com/.default"
    ],
    "policies": [
        "default"
    ],
    "user_claim": "email",
    "bound_audiences": [
        "my_client_id"
    ],
    "verbose_oidc_logging": "true"

添加"verbose_oidc_logging": "true" 行仅用于调试目的。

我遵循的登录过程

在 Vault UI 上启动登录过程后,我会被重定向到 URL

https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/authorize?client_id=my_client_id&nonce=5e52640c66c2dsf64f5ds3f1sd46dc6717&redirect_uri=https%3A%2F%2Fmy_hostname%2Fui%2Fvault%2Fauth%2Foidc%2Foidc%2Fcallback&response_type=code&scope=openid+https%3A%2F%2Fgraph.microsoft.com%2F.default&state=744a03304e71ed7e4dedgrd3541544

然后我收到登录成功消息,它会自行关闭窗口

我也在跟踪保管库服务器上的日志,我可以看到已经生成了一个令牌。如果我继续https://jwt.ms 并粘贴 JWT 令牌,它会被解密,我可以识别正确的值。 我可以在我的用户下使用正确的租户 ID 和客户端 ID 看到大约 90 个组。

如果我使用命令行vault login -method oidc role=default 尝试登录过程,我会收到相同的错误消息。

Code: 400. Errors:

* Token verification failed. error validating signature: failed to verify signature: failed to verify id token signature

【问题讨论】:

请看这个帖子***.com/questions/54979408/… @TonyJu 是的,这是真的,在 jwt.io 上,我们必须指定 HS256 算法而不是 MS 文档中提到的 RS256 才能查看签名验证。我尝试使用设置 jwt_supported_algs 强制 HS256,但它似乎不是插件 vaultproject.io/api/auth/jwt/… 支持的算法。 我的配置与您完全相同,但我没有收到电子邮件声明 Vault:claim "email" not found in token。我注意到,"user_claim": "email",, 行中有双逗号,请尝试修复它,可能解析不好,并且角色在 web ui 中不可见。 @MUHAHA 我仔细检查了一下,我的设置 json 中没有双逗号。它只是在问题中。 @DoRivard 你有没有找到解决方案?在同样的问题上磕磕绊绊 【参考方案1】:

我遇到了同样的麻烦。从 Azure 中删除应用程序并重新配置它会有所帮助。

我的 Vault 角色配置有效:

vault write auth/oidc/role/<< oidc_role_name >> -<<EOF

  "allowed_redirect_uris" : ["http://localhost:8250/oidc/callback","https://vault.example.com:8200/ui/vault/auth/oidc/oidc/callback"],
  "user_claim" : "sub",
  "policies" : "default",
  "oidc_scopes" : "https://graph.microsoft.com/.default,profile,email",
  "verbose_oidc_logging" : "true"

Azure API 权限中我有:

电子邮件 Group.Read.All GroupMember.Read.All openid 个人资料 User.Read 为我的域授予的一切

令牌配置: 声明:

电子邮件(类型:ID) 电子邮件(类型:访问) 组(类型:ID、访问、SAML) upn(类型:ID) upn(类型:访问)

身份验证: 隐式授权:

访问令牌 ID 令牌

【讨论】:

以上是关于Hashicorp Vault OIDC 身份验证方法与 Azure AD 错误验证签名的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS EKS 上使用 Kubernetes 身份验证方法部署 Hashicorp Vault 时出现证书错误

如何在生产中使用 Hashicorp Vault 的 AppRole?

突发!HashiCorp禁止在中国使用企业版VAULT软件

突发!HashiCorp禁止在中国使用企业版VAULT软件

HashiCorp Vault介绍

Hashicorp Vault 用于文件存储?