使用Sharepoint客户端Web部件登录



我面临使用Sharepoint客户端Web部件登录Jenkins的问题。

詹金斯方面的安全:使用Azure AD插件,用户现在可以使用Office 365凭据登录。

在云上:创建了一个应用程序注册,重定向URI为-https://{JenkinsDomain}/securityRealm/finishLogin

现在我正在创建一个客户端WebPart,并尝试访问URL-https:///api/json?tree=jobs[名称,颜色]从web部分,它说"错误403-禁止",尽管当我从新选项卡尝试相同的URL时,它会给我响应。

我尝试过的东西:

const msalConfig = {
auth: {
clientId: "api://<client>/",
// authority: "https://login.microsoftonline.com/common",
authority : "https://login.microsoftonline.com/<tenantID>/",
scopes: ['https://graph.windows.net/Directory.Read.All'],
redirectUri : 'https://<tenantName>.sharepoint.com/'
}
};
var userAgentApplication = new Msal.UserAgentApplication(msalConfig)
userAgentApplication.loginPopup().then(function (id_token) {
console.log(id_token);
var user = userAgentApplication.getAccount();
console.log(user);
if (user) {
}
})

这个代码给我错误:

AADSTS50011:请求中指定的回复URL与为应用程序配置的回复URL:"api://{clientID}/"。

在启用Azure AD的情况下,我是否可以通过客户端Web部件访问Jenkins API?感谢您的帮助。感谢

下面给出了我们从代码中调用Jenkins REST API的步骤,无论是Javascript/Java。

  1. 使用SSO或Jenkins登录登录Jenkins服务器(在您的情况下,您的AD将对您进行身份验证并将您带到主页(
  2. 登录后,转到管理用户
  3. 在管理用户中,对于选定的用户或超级管理员用户,我们必须选择进入用户详细信息页面的设置。我们通常有一个管理员用户,我们为其配置令牌
  4. 在该页面中,我们必须为令牌提供一个名称,并生成一个新的令牌
  5. 此令牌将被复制并放置在安全位置
  6. 完成后,保存配置文件
  7. 现在,从javascript/java代码中,使用usename:token格式并获取该值的base64字符串。示例java代码片段在下面给出

    String secureToken=Base64.getEncoder((.encodeToString((user+":"+key(.getBytes(((;

  8. 在此之后,在Authorization标头中设置secureToken,如下面为Java 提供的一样

    httpGet.setHeader(HttpHeaders.AUTHORIZATION,"Basic"+secureToken(;

  9. 现在,您可以用这种方法调用JenkinsRESTneneneba API,比如获取构建统计信息、触发构建等。

我将从Jenkins那里收集一些有用的链接并发布以供进一步阅读,因为安全令牌要安全使用,并且出于安全原因,它们必须在一段时间后轮换(因为这些会使这篇文章很长,所以我在这里跳过这些点(。

我有下面的链接,这将提供更多的细节

https://wiki.jenkins.io/display/JENKINS/Remote+访问+neneneba API

https://www.decodingdevops.com/jenkins-authentication-token-jenkins-rest-api/

此外,我得到了我们很久以前在node.js中使用的代码,以便与jenkins交谈,希望这对有用

const options = {
hostname: process.env.JENKINS_HOST,
port: process.env.JENKINS_PORT,
path: `${jenkinsBuildUrl}?param1=${param1}&param2=${params.Key}&operation=${operation}`,
method: "POST",
headers: {
'Authorization': 'Basic '+ Buffer.from('admin'+':'+process.env.AUTH_TOKEN).toString('base64')
}
};
const jr = https.request(options, jres => {
jres.on("data", chunk => {
console.log(`BODY: ${chunk}`);
});
jres.on("end", () => {
console.log("Request completed with no data.");
});
});
jr.on("error", e => {
console.log(
`Something went wrong when triggering the build in Jenkins Server in the current request: ${e.message}`
);
});
jr.end();

HTH-

最新更新