【问题标题】:Create Okta user via Okta API in Jenkins在 Jenkins 中通过 Okta API 创建 Okta 用户
【发布时间】:2021-11-02 17:11:28
【问题描述】:

问题

我正在运行 Jenkins 以实现作业自动化并使用 Okta 进行身份验证。我想创建一个可以按需运行以在 Okta 中创建用户的 Jenkins 作业。用户将拥有required by Okta 的属性:电子邮件、用户名等。

我如何在 Jenkins 中完成这项工作?

【问题讨论】:

  • 我已尽力编辑您的问题并提供适当的答案。请在提出其他问题之前参考stackoverflow.com/help/how-to-ask,因为您的问题不符合 StackOverflow 的质量标准
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: jenkins automation okta jenkins-cli okta-api


【解决方案1】:

初始设置

我编写了一个 Jenkinsfile,它将通过 Okta API 文档创建一个 Okta 用户。在运行此脚本之前,您需要在 Jenkins 中安装以下插件。

安装上述插件后,您需要 create an Okta API Token 并将其保存在 Jenkin 的 Credential Manager 类型 Secret Text 中(并给它一个 ID okta-api-token)。

概念验证

以下是一个概念验证的 Jenkinsfile,它将使用以下插件在 Okta 中创建用户

pipeline {
    
    agent {
        label 'master'
    }
    
    options {
        buildDiscarder( logRotator( numToKeepStr: "30" ) )
    }
        
    parameters { 
        string(name: 'firstName', description: 'New users first name') 
        string(name: 'lastName', description: 'New users last name') 
        string(name: 'email', description: 'New users email') 
        string(name: 'mobilePhone', description: 'New users phone') 
        password(name: 'password', description: 'Enter Password')
    }
    
    environment {
        oktaDomain = "yourdomain.com"
    }
    
    stages {
        
        stage('Execute') { 
            steps {
                script {
                    
                    // Create payload based on https://developer.okta.com/docs/reference/api/users/#request-example-3
                    def payload = """
                        { "profile":{"firstname": "$firstName","lastNAme": "$lastName","email": "$email","login": "$email","mobilePhone": "$mobilePhone"}, "credentials": { "password:{ "value": "$password"}}}
                    """
                    
                    // Send HTTP Post request with API Token saved in credential manager
                    withCredentials([string(credentialsId: 'apiToken', variable: 'okta-api-token')]) {
                        def response = httpRequest( 
                                        acceptType: 'APPLICATION_JSON', 
                                        contentType: 'APPLICATION_JSON', 
                                        httpMode: 'POST', 
                                        requestBody: payload, 
                                        url: "https://${oktaDomain}/api/v1/users?activate=true", 
                                        customHeaders: [[Authentication: "SSWS ${apiToken}"]]
                                    )
                    }
                    
                    def json = readJSON text: response.content
                    
                    echo json['id']
                        
                }
            }
        }
    }
    
    
    post {
        changed {
            emailext subject: 'Your Okta user has been created',
                body: 'Your Okta user has been created',
                replyTo: '$DEFAULT_REPLYTO',
                to: "$email"
        }
    }
}

假设您按照上面列出的步骤操作,您只需要将 oktaDomain 变量更改为您的 Okta 域。

【讨论】:

  • 脚本应该使用 Okta API 来执行这项工作。 JSON 有效负载。尝试在 Okta 中创建一个新用户。记下必填字段(用户名、电子邮件等)。创建一个将 JSON 作为输入的脚本,并检查是否存在必填字段(用户名、电子邮件等)。如果所有字段都存在,请调用 Okta API 以使用提供的信息创建用户。创建一个 Jenkins 作业来运行这个脚本。创建测试负载数据并执行 Jenkins 作业以确保其按预期工作。
  • 如果你能帮我更新这个:))
  • @RonitaRoy 不需要更新,因为这正是我提供的脚本所做的。我看到您今天就同一主题发表了另一篇文章(已关闭)。我不确定您有什么问题,但提供的示例符合您的所有标准。如果您有任何问题,请在此处提问。如果脚本适合您,请接受答案并投票
  • 感谢您的回答,但在我的情况下,创建/添加用户的必填字段略有不同(其中一些也是可选的。)将链接附加到必填字段的屏幕截图在下面创建一个用户:i.stack.imgur.com/lYoUu.png如果你能根据上面的要求告诉你需要在脚本中进行的更改。
  • @ronitaroy 所以修改我提供的概念证明如下:1)添加附加属性作为参数(或环境变量,如果它们是常量),然后 2)修改 json 对象以包含它们作为属性。应该相当直接,因为您有其他属性作为示例
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多