Zimbra SOAP 创建帐户

问题描述 投票:0回答:2

我想使用 SOAP API 创建 Zimbra 用户帐户,但无法让它工作 - 这很奇怪,因为我可以获得 AuthToken,甚至可以使用以下命令查看已创建的帐户的信息(通过管理面板)请求GetAccountRequest,但是创建帐户不起作用。

这是我的 AuthToken (POST) 请求代码:

Header: Content-Type: application/soap+xml

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header xmlns="urn:zimbra">
    <context></context>
  </soap:Header>
  <soap:Body>
    <AuthRequest xmlns="urn:zimbraAdmin" password="myPassword"> 
        <account by="adminName">[email protected]</account> 
    </AuthRequest>
  </soap:Body>
</soap:Envelope>

这有效,我拿回了身份验证令牌。

接下来我尝试使用此(POST)请求创建新的用户帐户:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header xmlns="urn:zimbraAdmin">
    <context>
<authToken> 0_69cd602eef3cf46bb488b02c6a173da698d17bdb_69643blablaTherestofmyauthtoken</authToken>
</context>
  </soap:Header>
  <soap:Body>
     <CreateAccountRequest xmlns="urn:zimbraAdmin" name="[email protected]" password="john123!"> 
        <a n="givenName">John</a>
        <a n="sn">Doe</a>
        <a n="displayName">John Doe</a>
    </CreateAccountRequest>
  </soap:Body>
</soap:Envelope>

这是我得到的回应:

SimpleXMLElement Object
(
    [soap:Code] => SimpleXMLElement Object
        (
            [soap:Value] => soap:Sender
        )

    [soap:Reason] => SimpleXMLElement Object
        (
            [soap:Text] => no valid authtoken present
        )

    [soap:Detail] => SimpleXMLElement Object
        (
            [Error] => SimpleXMLElement Object
                (
                    [Code] => service.AUTH_REQUIRED
                    [Trace] => btpool0-3022://zimbra.mydomain.com:7071/service/admin/soap:1449756733826:bc04a0eab6d6c7ec:SoapEngine368
                )

        )

)

有人可以帮助我吗?谢谢..

php api rest soap zimbra
2个回答
3
投票

所以我想通了 - 当您发出 AuthToken 请求时,您会收到一个带有 AuthToken 值的 cookie,当您尝试创建新用户帐户时,您必须将该 cookie 发送回标头部分,如下所示:

Cookie: ZM_ADMIN_AUTH_TOKEN=0_69cd602eef3cf46bb488b02c6a173da698d17bdb_69643blablaTherestofmyauthtoken

整个请求必须如下所示:

$request= array(
    'http' => array(
        'method'  => 'POST',
        'header'  => array(
            'Content-Type: application/soap+xml',
            'Cookie: ZM_ADMIN_AUTH_TOKEN=0_69cd602eef3cf46bb488b02c6a173da698d17bdb_69643blablaTherestofmyauthtoken',
        ),
        'timeout'  => 20, 
        'ignore_errors' => true,  
        'content'  => '
            <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                <soap:Header xmlns="urn:zimbraAdmin">
                    <context>
                        <authToken> 0_69cd602eef3cf46bb488b02c6a173da698d17bdb_69643blablaTherestofmyauthtoken</authToken>
                    </context>
                </soap:Header>
                <soap:Body>
                    <CreateAccountRequest xmlns="urn:zimbraAdmin" name="[email protected]" password="john123!"> 
                        <a n="givenName">John</a>
                        <a n="sn">Doe</a>
                        <a n="displayName">John Doe</a>
                    </CreateAccountRequest>
                </soap:Body>
            </soap:Envelope>
        ',
    ),
);

文档中解释了需要管理员授权令牌,但它没有说明您必须在请求标头中通过 cookie 将其发回。


0
投票

Zimbra 提供了两种获取 AuthToken 的方法:

  1. 用户令牌
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:zimbraAccount">
    <soap:Header/>
    <soap:Body>
        <urn:AuthRequest>
            <urn:account by="name">${email}</urn:account>
            <urn:password>${password}</urn:password>
        </urn:AuthRequest>
    </soap:Body>
</soap:Envelope>
  1. 管理员令牌

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="urn:zimbraAdmin">
    <soap:Header/>
    <soap:Body>
        <AuthRequest xmlns="urn:zimbraAdmin">
            <account by="name">${email}</account>
            <password>${password}</password>
        </AuthRequest>
    </soap:Body>
</soap:Envelope>

注意:请求中的两个令牌有效负载相似,但管理令牌的命名空间更改为 urn:zimbraAdmin。

使用 Admin API 时,必须获取 AdminToken。文档在标头中指定了所需的命名空间,通常标记为 Service:

  • 命名空间:“urn:zimbraAdmin”

只要命名空间为“urn:zimbraAdmin”,就必须使用管理令牌。

要创建帐户,请使用以下示例:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="urn:zimbraAdmin">
    <soap:Header/>
    <context xmlns="urn:zimbraAdmin">
        <authToken>${authAdminToken}</authToken>
    </context>
    <soap:Body>
        <CreateAccountRequest name="${email}" password="${password}">
        </CreateAccountRequest>
    </soap:Body>
</soap:Envelope>

© www.soinside.com 2019 - 2024. All rights reserved.