通过 REST 创建 Jira 用户会导致 401 - 此资源需要 WebSudo

Posted

技术标签:

【中文标题】通过 REST 创建 Jira 用户会导致 401 - 此资源需要 WebSudo【英文标题】:Jira user creation via REST results in 401 - This resource requires WebSudo 【发布时间】:2015-10-27 11:17:39 【问题描述】:

我正在尝试编写一个 PowerShell 脚本,该脚本将自动将新用户帐户添加到我们的 Jira 实例的过程。我已经提供了我的代码,但老实说,我什至没有达到这一点,因为我收到了 401 错误:

此资源需要 WebSudo。

我在 Jira 支持论坛上看到了这两个帖子,但我不清楚如何调整代码以获取然后将其应用于我的 REST 调用。如果这会使这一切变得更容易,我可以将其更改为使用 .Net WebClient 类,但现在我有点不知所措。

$url = "https://devjira.domain.com/rest/api/2/user"


$user = "admin"
$pass = "super secure password"
$secpasswd = ConvertTo-SecureString $user -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($pass, $secpasswd);

$userObject = @
    name     = "rkaucher@domain.net";
    emailAddress = "robert_kaucher@domain.com";
    displayName  = "Bob Kaucher";
    notification = $true;


$restParameters = @
    Uri = $url;
    ContentType = "application/json";
    Method = "POST";
    Body = (ConvertTo-Json $userObject).ToString();
    Credential = $cred;



Invoke-RestMethod @restParameters

JSON 输出


    "name":  "rkaucher@domain.net",
    "displayName":  "Bob Kaucher",
    "emailAddress":  "robert_kaucher@domain.com",
    "notification":  true

【问题讨论】:

【参考方案1】:

我将脚本的身份验证组件更改为:

$cred = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$user`:$pass"))
$headers = @Authorization=("Basic $cred") 

这是基于对以下问题的选定答案:

PowerShell's Invoke-RestMethod equivalent of curl -u (Basic Authentication)

方法的最终调用如下所示:

$restParameters = @
    Uri = $url;
    ContentType = "application/json";
    Method = "POST";
    Body = (ConvertTo-Json $userObject).ToString();
    Headers = $headers;


$response = Invoke-RestMethod @restParameters

【讨论】:

发生这种情况是因为Invoke-RestMethodInvoke-WebRequest 总是先提交不带凭据的请求,并在重新发送带凭据的请求之前等待 401 响应,因为这是 RFC 定义行为的方式. Web 服务不回复 401(例如,选择 404 代替)的情况越来越普遍,有时这是为了掩盖特定资源对匿名请求有效这一事实。 @briantist - 感谢您的解释。这很有道理。

以上是关于通过 REST 创建 Jira 用户会导致 401 - 此资源需要 WebSudo的主要内容,如果未能解决你的问题,请参考以下文章

如何通过rest api向jira问题添加标志

使用 ruby​​ 创建 OKTA JIRA 登录

如何使用 JIRA REST API 将 JIRA Agile 问题分配给当前用户的当前 sprint?

带有 python 的 Jira API 在有效凭据上返回错误 401

如何使用 JIRA Cloud REST API 创建对 jira 问题的内部评论

使用 OAuth 和 Node.JS 对 JIRA REST API 进行身份验证