gpt4 book ai didi

azure-ad-b2c - AAD B2C : Output a nested JSON object in a JWT for Hasura

转载 作者:行者123 更新时间:2023-12-03 19:12:56 26 4
gpt4 key购买 nike

我们正在使用 Hasura 向消费者提供我们的 GraphQL API。目前我们使用 Auth0 对用户进行身份验证,但我们希望迁移到 Azure AD B2C。

JWT security with Hasura 的一个要求是使用“https://hasura.io/jwt/claims”命名空间来提供自定义声明(例如 X-Hasura-Org-Id、X-Hasura-App-Id 等)。

我已经能够将 AAD B2C 用于:

  • 使用 REST API 收集这些自定义声明所需的值;
  • 使用 string 将单独的 stringCollection/ClaimsTransformation 值转换为 JSON 对象;和
  • 返回 JWT 中转换后的声明。

  • 但是,我无法弄清楚如何在不转义内容的情况下让 JSON 对象出现在最终的 JWT 中 - 即作为字符串而不是对象输出。

    AAD B2C 是否能够在 JWT 中输出嵌套对象?

    我们希望达到的目标

    这就是 Hasura 希望 JWT 命名空间的样子(注意 https://hasura.io/jwt/claims 对象)
    {
    "exp": 1588405829,
    "nbf": 1588402229,
    "ver": "1.0",
    "iss": "https://<redacted>.b2clogin.com/<redacted>/v2.0/",
    "sub": "<redacted>",
    "aud": "<redacted>",
    "acr": "b2c_1a_aaa_signupsignin",
    "nonce": "defaultNonce",
    "iat": 1588402229,
    "auth_time": 1588402229,
    "given_name": "Test",
    "family_name": "User",
    "name": "Test User",
    "email": "test@example.com",
    "idp": "facebook.com",
    "https://hasura.io/jwt/claims": {
    "x-hasura-allowed-roles":["role1","role2","role3"],
    "x-hasura-default-role":"role1",
    "x-hasura-org-id":"test-org",
    "x-hasura-user-id":"test-user-id",
    "x-hasura-app-id":"<redacted>"
    }
    }

    我们现在得到的

    这是来自 AAD B2C 的 JWT 示例:
    {
    "exp": 1588405829,
    "nbf": 1588402229,
    "ver": "1.0",
    "iss": "https://<redacted>.b2clogin.com/<redacted>/v2.0/",
    "sub": "<redacted>",
    "aud": "<redacted>",
    "acr": "b2c_1a_aaa_signupsignin",
    "nonce": "defaultNonce",
    "iat": 1588402229,
    "auth_time": 1588402229,
    "given_name": "Test",
    "family_name": "User",
    "name": "Test User",
    "email": "test@example.com",
    "idp": "facebook.com",
    "https://hasura.io/jwt/claims": "{\"x-hasura-allowed-roles\":[\"role1\",\"role2\",\"role3\"],\"x-hasura-default-role\":\"role1\",\"x-hasura-org-id\":\"test-org\",\"x-hasura-user-id\":\"test-user-id\",\"x-hasura-app-id\":\"<redacted>\"}"
    }

    似乎没有将声明存储为对象的选项,只有一个字符串。

    我们如何到达那里
    ClaimsTransformation 的一个例子:
    <ClaimsTransformation Id="hasuraClaimsToJson" TransformationMethod="GenerateJson">
    <InputClaims>
    <InputClaim ClaimTypeReferenceId="x-hasura-allowed-roles" TransformationClaimType="x-hasura-allowed-roles" />
    <InputClaim ClaimTypeReferenceId="x-hasura-default-role" TransformationClaimType="x-hasura-default-role" />
    <InputClaim ClaimTypeReferenceId="x-hasura-org-id" TransformationClaimType="x-hasura-org-id" />
    <InputClaim ClaimTypeReferenceId="x-hasura-user-id" TransformationClaimType="x-hasura-user-id" />
    </InputClaims>
    <InputParameters>
    <InputParameter Id="x-hasura-app-id" DataType="string" Value="internal-redacted-uuid" />
    </InputParameters>
    <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="hasuraClaims" TransformationClaimType="outputClaim" />
    </OutputClaims>
    </ClaimsTransformation>
    RelyingParty 配置示例:
    <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="hasuraClaims" PartnerClaimType="https://hasura.io/jwt/claims" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
    <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
    </RelyingParty>

    最佳答案

    您是否考虑过使用 claims_format 在 HASURA_GRAPHQL_JWT_SECRET 中传递 stringified_json ,以便 Hasura 可以将声明作为字符串而不是对象接受。我在这里找到了文档条目:https://hasura.io/docs/1.0/graphql/manual/auth/authentication/jwt.html

    enter image description here

    关于azure-ad-b2c - AAD B2C : Output a nested JSON object in a JWT for Hasura,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61555758/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com