无法通过adminsdk插入subOU无效的父组织单元Id

2024-09-30 16:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

环境详细信息

  • 操作系统类型和版本:Fedora 32
  • Python版本:3.7.9
  • pip版本:pip 19.1.1 from /usr/lib/python3.7/site-packages/pip (python 3.7)
  • google-api-python-client版本:1.12.5

复制步骤

  1. 尝试使用orgunits.insert方法添加任何子OU

代码示例

#self.orgunits is created previously and points to a valid google api session.
self.orgunits = build('admin', 'directory_v1', credentials=creds).orgunits()
user.dept = "Technology"
user.func_unit = "Systems"

#This returns a value that appears valid
parent_id = self.orgunits.get(customerId="xxxxxxx", orgUnitPath=f"{user.dept}").execute()['orgUnitId']

#The department parent org unit exists
print(self.orgunits.get(customerId="xxxxxx", orgUnitPath=f"{user.dept}").execute())
new_ou = {
            'name': f"{user.func_unit}",
            'parentOrgUnitPath' : f"{user.dept}"
            }
print(json.dumps(new_ou)) #Everything appears fine here
try:
    self.orgunits.insert(customerId="xxxxxx", body=json.dumps(new_ou)).execute()
except HttpError as ie:
    print(ie.__dict__)

输出

{'kind': 'admin#directory#orgUnit', 'etag': '"HKDSgTnCxrWl3RtRnlZSCPY3NjdWJxz53nrhwSz7ob4/w1e7lJjaci7tVElbAz8hlgavRvg"', 'name': 'Technology', 'description': 'Technology department', 'orgUnitPath': '/Technology', 'orgUnitId': 'id:03ph8a2z0jkzi9y', 'parentOrgUnitPath': '/', 'parentOrgUnitId': 'id:037oov482lkthdl'}
{"name": "Systems", "parentOrgUnitPath": "/Technology"}
{'resp': {'vary': 'Origin, X-Origin, Referer', 'content-type': 'application/json; charset=UTF-8', 'date': 'Wed, 28 Oct 2020 20:59:43 GMT', 'server': 'ESF', 'cache-control': 'private', 'x-xss-protection': '0', 'x-frame-options': 'SAMEORIGIN', 'x-content-type-options': 'nosniff', 'alt-svc': 'h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"', 'transfer-encoding': 'chunked', 'status': '400', 'content-length': '224', '-content-encoding': 'gzip'}, 'content': b'{\n  "error": {\n    "code": 400,\n    "message": "Invalid Parent Orgunit Id",\n    "errors": [\n      {\n        "message": "Invalid Parent Orgunit Id",\n        "domain": "global",\n        "reason": "invalid"\n      }\n    ]\n  }\n}\n', 'uri': 'https://www.googleapis.com/admin/directory/v1/customer/xxxxxx/orgunits?alt=json', 'error_details': ''}

格式化的http响应

{
    'resp': {
        'vary': 'Origin, X-Origin, Referer',
        'content-type': 'application/json; charset=UTF-8',
        'date': 'Wed, 28 Oct 2020 20:59:43 GMT',
        'server': 'ESF',
        'cache-control': 'private',
        'x-xss-protection': '0',
        'x-frame-options': 'SAMEORIGIN',
        'x-content-type-options': 'nosniff',
        'alt-svc': 'h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
        'transfer-encoding': 'chunked',
        'status': '400',
        'content-length': '224',
        '-content-encoding': 'gzip'
    },
    'content': b '{\n  "error": {\n    "code": 400,\n    "message": "Invalid Parent Orgunit Id",\n    "errors": [\n      {\n        "message": "Invalid Parent Orgunit Id",\n        "domain": "global",\n        "reason": "invalid"\n      }\n    ]\n  }\n}\n',
    'uri': 'https://www.googleapis.com/admin/directory/v1/customer/xxxxxx/orgunits?alt=json',
    'error_details': ''
}

我尝试过的

我参考了以下文件: 谷歌文档:https://developers.google.com/admin-sdk/directory/v1/reference/orgunits/insert

Python文档:https://developers.google.com/resources/api-libraries/documentation/admin/directory_v1/python/latest/admin_directory_v1.orgunits.html#insert

以下所有操作都会导致与消息Invalid Parent Orgunit Id相同的400错误

  • 我已经尝试在new_ou对象中使用parentOrgUnitId而不是parentOrgUnitPath,如上述文档中所述
  • 我已尝试为parentOrgUnitPath值添加/删除前导斜杠和尾随斜杠
  • 我已经删除了new_ou对象内部的fstring
  • 我试图复制另一个功能性OU的JSON。删除etag并用更新的值替换其余值

非常感谢您的帮助!谢谢大家!


Tags: selfjsonnewadminoucontentdirectoryh3
1条回答
网友
1楼 · 发布于 2024-09-30 16:23:57

已解决

在Google的OAuth2平台上进行了大量的跟踪和挖掘之后,我推断这是因为当为orgunit设置body参数时,insert不能用^{格式化。它必须是Python字典

更改: self.orgunits.insert(customerId="xxxxxx", body=json.dumps(new_ou)).execute()

致: self.orgunits.insert(customerId="xxxxxx", body=new_ou).execute()

相关问题 更多 >