问题描述
我正在尝试通过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
值,并为管理员角色添加一个硬编码值
通过门户网站创建时,您可以轻松地输入字符串值作为声明的源类型。
但是,通过Graph API,源类型必须为user
,resource
,audience
,company
或transformation
。
似乎您可以创建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.0
和beta
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
对象仅添加多余的字段。
cat <<- EOF > claims.json
{
"deFinition": [
"{\"ClaimsMappingPolicy\":{
\"Version\":1,\"SamlClaimType\":\"username\"}
],\"ClaimsTransformation\":[
{\"ID\":\"xxxxxxxxx\","isOrganizationDefault": false
}
EOF
但是ClaimsSchema
和ClaimsTransformation
之间没有关联。这暗示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}
发布 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}
有关CreateTermsOfService的更多信息,请参阅此document