Azure 使用Sharepoint客户端Web部件登录
我面临使用Sharepoint客户端Web部件登录Jenkins的问题 Jenkins端的安全性:使用Azure AD插件,用户现在可以使用Office 365凭据登录 在云上:创建了一个应用注册,重定向URI为-https://{JenkinsDomain}/securityRealm/finishLogin 现在我正在创建一个客户端Web部件,并尝试访问URL-https:///api/json?tree=jobs[名称,颜色]在web部件中显示“错误403-禁止”,尽管当我从新选项卡尝试相同的URL时,它会给出响应 我尝试过的事情:Azure 使用Sharepoint客户端Web部件登录,azure,jenkins,sharepoint,azure-active-directory,spfx,Azure,Jenkins,Sharepoint,Azure Active Directory,Spfx,我面临使用Sharepoint客户端Web部件登录Jenkins的问题 Jenkins端的安全性:使用Azure AD插件,用户现在可以使用Office 365凭据登录 在云上:创建了一个应用注册,重定向URI为-https://{JenkinsDomain}/securityRealm/finishLogin 现在我正在创建一个客户端Web部件,并尝试访问URL-https:///api/json?tree=jobs[名称,颜色]在web部件中显示“错误403-禁止”,尽管当我从新选项卡尝试相
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) {
}
})
const msalConfig={
认证:{
客户ID:“api:///”,
//权限:“https://login.microsoftonline.com/common",
权限:“https://login.microsoftonline.com//",
范围:['https://graph.windows.net/Directory.Read.All'],
重定向URI:'https://.sharepoint.com/'
}
};
var userAgentApplication=新的Msal.userAgentApplication(msalConfig)
userAgentApplication.loginPopup().then(函数(id_令牌){
console.log(id\u令牌);
var user=userAgentApplication.getAccount();
console.log(用户);
如果(用户){
}
})
这段代码给了我一个错误:
AADSTS50011:请求中指定的答复URL与
为应用程序配置的回复URL:
'api://{clientID}/'
是否有任何方法可以通过客户端Web部件访问启用Azure AD的Jenkins API?
感谢您的帮助。下面给出了从代码中调用Jenkins REST API的步骤,可以是Javascript/Java
Authorization
标题中设置secureToken
,如下所示
setHeader(HttpHeaders.AUTHORIZATION,“Basic”+secureToken)const options = {
hostname: process.env.JENKINS_HOST,
port: process.env.JENKINS_PORT,
path: `${jenkinsBuildUrl}?param1=${param1}¶m2=${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您是否尝试在azure portal中的应用程序上提供匹配的重定向URI?您的广告的重定向URL是
https://{JenkinsDomain}/securityRealm/finishLogin
,但在您使用的代码中是https://.sharepoint.com/
这就是您获得STS的原因error@Saravanan我厌倦了“https://{JenkinsDomain}”/securityRealm/finishLogin的url也是,但它显示了相同的错误。另外,如果可以的话,我想从javascript获得类似的东西,谢谢@MdFaridUddinKiron是的,尝试过,但没有成功。您是否试图从Javascript访问Jenkins REST API?您好Saravanan,很抱歉响应延迟,非常感谢您为回答问题付出了这么多努力。这个答案很有帮助,但问题是Jenkins上有多个用户,而我作为管理员无法生成所有用户的令牌(Jenkins限制),我们需要每个用户使用我们的自定义应用程序,而不是Jenkins。(我知道这很奇怪,但这是要求)。无论如何,非常感谢你的帮助。如果我也找到了,我会发布解决方案。@AbhishekPal,不需要所有用户都生成令牌,一个令牌就可以满足所有用户的需要。即使您要为每个用户自动生成一个令牌,您也可以通过Jenkins REST API来完成。是的,这会有所帮助,我不知道我可以使用REST API创建另一个用户的令牌。非常感谢您的帮助,我们将尝试此操作并在此处更新。@Sarvanan,再次检查,管理员无法为其他用户创建用户令牌。另外,正如你所说的“一个令牌就可以满足所有用户的需要”,我也试过了,但没有,詹金斯夫妇抛出了一个错误-登录无效。@AbhishekPal,我们所有的应用程序都在使用管理员用户生成的安全令牌进行生产。您必须获取令牌并以如下格式使用:base64(((“admin:tokenvalue”).getbytes())
。我假设您可以使用用户的用户名而不是“admin”,如果这样,它将失败。尝试使用固定用户名(例如:admin)而不是用户的用户名。