Azure Graph API-具有ClaimsTransformation

问题描述

我正在尝试通过Azure Graph API自动执行企业应用程序的配置。 具体而言,其Azure Palo Alto管理员界面-https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/paloaltoadmin-tutorial#configure-azure-ad-sso

我已经设法通过前端实现了这一目标,但是无法通过Graph Api配置自定义声明。

现在,我只想在自定义声明中使用字符串声明作为customadmin值,并为管理员角色添加一个硬编码值

Azure Palo Alto Admin UI SAML Claim

通过门户网站创建时,您可以轻松地输入字符串值作为声明的源类型。 但是,通过Graph API,源类型必须为userresourceaudiencecompanytransformation

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-claims-mapping#claim-schema-entry-elements

似乎您可以创建string类型的transformation,然后将转换链接到主ClaimsSchema中。

这里有一个类似的示例https://docs.microsoft.com/en-us/graph/api/resources/claimsmappingpolicy?view=graph-rest-1.0#example-definition-that-uses-a-claims-transformation 但是我无法使这个例子奏效。即使进行一点按摩,该示例也会失败。香港专业教育学院一直在尝试:

cat <<- EOF > claims.json
{
  "deFinition": [
    "{\"ClaimsMappingPolicy\":{
        \"Version\":1,\"IncludeBasicclaimset\":\"true\",\"ClaimsSchema\":[
        {\"Source\":\"user\",\"ID\":\"extensionattribute1\"},{\"Source\":\"transformation\",\"ID\":\"DataJoin\",\"TransformationId\":\"JoinTheData\",\"JwtClaimType\":\"JoinedData\"}
        ],\"ClaimsTransformation\":[
        {\"ID\":\"JoinTheData\",\"TransformationMethod\":\"Join\",\"InputClaims\":[{\"ClaimTypeReferenceId\":\"extensionattribute1\",\"TransformationClaimType\":\"string1\"}],\"InputParameters\": [{\"ID\":\"string2\",\"Value\":\"sandBox\"},{\"ID\":\"separator\",\"Value\":\".\"}],\"OutputClaims\":[{\"ClaimTypeReferenceId\":\"DataJoin\",\"TransformationClaimType\":\"outputClaim\"}]}
        ]
    }}"
  ],"displayName": "Azure Reference Claim","isOrganizationDefault": false
}
EOF
az rest --method post --headers Content-type="application/json" --url "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies" --body @claims.json

我已经尝试了v1.0beta API,但是它们都具有相同的行为

哪个返回以下错误

Bad Request({
  "error": {
    "code": "Request_BadRequest","message": "Property  has an invalid value.","innerError": {
      "date": "2020-09-01T13:03:10","request-id": "bc7cf58e-fe6d-47d1-b1e5-cae43326864f"
    }
  }
})

我可以使用以下方法使其余的Palo Alto声称可以正常工作(不包括自定义字符串):

{
  "deFinition": [
    "{\"ClaimsMappingPolicy\":{
        \"Version\":1,\"ClaimsSchema\": [{\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier\"},{\"Source\":\"user\",\"ID\":\"givenname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname\"},\"ID\":\"displayname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\"},\"ID\":\"surname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname\"},\"SamlClaimType\":\"username\"}]
         }}"
  ],"displayName": "Palo Alto Claims Policy","isOrganizationDefault": false
}

我能够创建一个CustomString转换,该转换不会与以下内容链接

{
  "deFinition": [
    "{\"ClaimsMappingPolicy\":{
      \"Version\":1,\"ClaimsTransformation\":[{\"ID\":\"CreateTermsOfService\",\"TransformationMethod\":\"CreateStringClaim\",\"InputParameters\": [{\"ID\":\"value\",\"DataType\":\"string\",\"Value\":\"sandBox\"}],\"OutputClaims\":[{\"ClaimTypeReferenceId\":\"TOS\",\"TransformationClaimType\":\"createdClaim\"}]}]
    }}",],"displayName": "sdfa","isOrganizationDefault": false
}

但是,当我以示例格式尝试它们时,出现错误

{
  "deFinition": [
    "{\"ClaimsMappingPolicy\":{
        \"Version\":1,\"ClaimsSchema\": [
            {\"Source\":\"user\",\"SamlClaimType\":\"username\"},\"TransformationID\":\"xxxxxxxxx\",\"SamlClaimType\":\"test\"}
        ],\"ClaimsTransformation\":[
            {\"ID\":\"xxxxxxxxx\",\"TransformationClaimType\":\"createdClaim\"}]}
        ]
    }}"
  ],"isOrganizationDefault": false
}

哪个返回相同的无用错误

Bad Request({
  "error": {
    "code": "Request_BadRequest","request-id": "bc7cf58e-fe6d-47d1-b1e5-cae43326864f"
    }
  }
})

任何想法我在做什么错?我试图以这个例子为基础,但我无法工作。 我不想使用Powershell,而是希望能够通过桌面终端实现自动化。

我想我可以避免这种情况,并让PA与AAD集成而无需硬编码值,但是我认为我应该能够以这种方式工作。

ClaimMappingPolicy对象的强制编码使其非常可靠地进行开发,因此可能在某处存在问题。 Ive还尝试仅创建没有{{1}的ClaimsSchema,然后运行ClaimsTransformation用转换后的对象修改对象,但是它只会覆盖整个PATCH对象,而不是覆盖整个ClaimsMappingPolicy对象仅添加多余的字段。

当我从ClaimsSchema删除转换源时,请求成功。

cat <<- EOF > claims.json
{
  "deFinition": [
    "{\"ClaimsMappingPolicy\":{
        \"Version\":1,\"SamlClaimType\":\"username\"}
        ],\"ClaimsTransformation\":[
           {\"ID\":\"xxxxxxxxx\","isOrganizationDefault": false
}
EOF

但是ClaimsSchemaClaimsTransformation之间没有关联。这暗示ClaimsSchema对象存在问题

{\"Source\":\"transformation\",\"SamlClaimType\":\"test\"}

但是,当查看文档和(可能是损坏的)参考示例时,这似乎很合适。

解决方法

提供答案的信息过长,无法对其进行评论。请在下面的Graph资源管理器查询中尝试此操作

发布 https://graph.microsoft.com/beta/policies/claimsMappingPolicies

 {"definition":["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\",\"ClaimsSchema\":[{\"Source\":\"user\",\"ID\":\"extensionattribute1\"},{\"Source\":\"transformation\",\"ID\":\"DataJoin\",\"TransformationId\":\"JoinTheData\",\"JwtClaimType\":\"JoinedData\"}],\"ClaimsTransformations\":[{\"ID\":\"JoinTheData\",\"TransformationMethod\":\"Join\",\"InputClaims\":[{\"ClaimTypeReferenceId\":\"extensionattribute1\",\"TransformationClaimType\":\"string1\"}],\"InputParameters\": [{\"ID\":\"string2\",\"Value\":\"sandbox\"},{\"ID\":\"separator\",\"Value\":\".\"}],\"OutputClaims\":[{\"ClaimTypeReferenceId\":\"DataJoin\",\"TransformationClaimType\":\"outputClaim\"}]}]}}"],"displayName":"TestclaimsPolicy","isOrganizationDefault":false}

enter image description here

发布 https://graph.microsoft.com/beta/policies/claimsMappingPolicies

{"definition":["{\"ClaimsMappingPolicy\":{\"Version\":1,\"ClaimsSchema\": [{\"Source\":\"user\",\"ID\":\"userprincipalname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier\"},{\"Source\":\"user\",\"ID\":\"givenname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname\"},\"ID\":\"displayname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\"},\"ID\":\"surname\",\"SamlClaimType\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname\"},\"SamlClaimType\":\"username\"}],\"ClaimsTransformation\":[{\"ID\":\"CreateTermsOfService\",\"TransformationMethod\":\"CreateStringClaim\",\"InputParameters\": [{\"ID\":\"value\",\"DataType\":\"string\",\"Value\":\"sandbox\"}],\"OutputClaims\":[{\"ClaimTypeReferenceId\":\"TOS\",\"TransformationClaimType\":\"createdClaim\"}]}]}}"],"displayName":"Test1234","isOrganizationDefault":false}

enter image description here

有关CreateTermsOfService的更多信息,请参阅此document