如何解决如何避免使用loginPopup或loginRedirect并以静默方式获得身份验证
我想避免使用loginPopup或loginRedirect并直接进行身份验证。我正在使用以下代码。我试图通过将我的聊天机器人托管在sharepoint网站上来实现SSO。由于我已经登录到我的sharepoint网站,因此需要避免再次登录。
当前功能,当我单击聊天机器人图标时,我会在当前站点上看到一个弹出窗口。即sharepoint并且我再次登录,我需要避免这种情况。
有关完整代码click here
function onSignInClick() {
alert("Inside onSignInClick function");
let requestObj = {
scopes: ["user.read",'openid','profile']
};
debugger;
clientApplication.loginPopup(requestObj)
.then(onSignin)
.catch(function (error) { console.log(error) });
}
function onSignin(idToken) {
let user = clientApplication.getAccount();
document.getElementById("userName").innerHTML = "Currently logged in as " + user.name;
let requestObj1 = {
scopes: ["user.read",'profile']
};
}
var clientApplication;
(function () {
var msalConfig = {
auth: {
clientId: '<client id>',authority: 'https://login.microsoftonline.com/<directory id>'
},cache: {
cacheLocation: 'localStorage',storeAuthStateInCookie: false
}
};
if (!clientApplication) {
clientApplication = new Msal.UserAgentApplication(msalConfig);
//alert("Inside if clientApplication: " + JSON.parse(clientApplication));
}
}());
(async function main() {
// Add your BOT ID below
var BOT_ID = "<Bot-Id>";
var theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
//alert("before userId async function: " + JSON.parse(clientApplication));
var userId = clientApplication.account?.accountIdentifier != null
? ("You-customized-prefix" + clientApplication.account.accountIdentifier).substr(0,64)
: (Math.random().toString() + Date.now().toString()).substr(0,64)
;
//debugger;
alert("after userId async function: " + JSON.parse(userId));
const { token } = await fetchJSON(theURL);
const directLine = window.WebChat.createDirectLine({ token });
const store = WebChat.createStore({},({ dispatch }) => next => action => {
const { type } = action;
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',payload: {
name: 'startConversation',type: 'event',value: { text: "hello" }
}
});
return next(action);
}
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
const activity = action.payload.activity;
let resourceUri;
if (activity.from && activity.from.role === 'bot' && (resourceUri = getOAuthCardResourceUri(activity))) {
exchangeTokenAsync(resourceUri)
.then(function (token) {
if (token) {
directLine.postActivity({
type: 'invoke',name: 'signin/tokenExchange',value: {
id: activity.attachments[0].content.tokenExchangeResource.id,connectionName: activity.attachments[0].content.connectionName,token
},"from": {
id: userId,name: clientApplication.account.name,role: "user"
}
}).subscribe(
id => {
if (id === 'retry') {
// bot was not able to handle the invoke,so display the oauthCard
return next(action);
}
// else: tokenexchange successful and we do not display the oauthCard
},error => {
// an error occurred to display the oauthCard
return next(action);
}
);
return;
}
else
return next(action);
});
}
else
return next(action);
}
else
return next(action);
});
window.WebChat.renderWebChat(
{
directLine: directLine,store,userID: userId,styleOptions
},document.getElementById('webchat')
);
})()
.catch(err => console.error("An error occurred: " + err));
解决方法
根据您的情况,消除了augification中的loginPopup或loginRedirect,我知道您不需要用户参与登录。针对您的方案的可能解决方案是使用Client credential flow.
“客户端凭据流”不需要用户登录,并且可以使用应用程序权限以静默方式登录。
请参阅此code sample可以提供帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。