我有一个ASP.NET MVC 4应用程序,允许用户使用Gmail等外部服务登录。
到目前为止,用户可以在应用程序内登录和导航。但问题是注销。我有一个注销该请求的按钮,调用LogOff()
内的控制器操作AccountController
。在该方法中,如果用户通过oauth进行身份验证,我该如何注销?
使用本地帐户,我使用:
public ActionResult LogOff()
{
WebSecurity.Logout();
return RedirectToAction("Login", "Account");
}
但是有了oauth我没有看到类似的东西...... 我想我需要清除某种饼干,但我不知道如何......
答案 0 :(得分:2)
基于this,我实现了以下客户端解决方案(我之前询问用户是否也要在提供商中注销):
//get accountType, accessToken, redirectUrl and clientID
var accountType = ...;
var accessToken = ...;
var redirectUrl = ...;
var clientID = ...;
$("#logoutConfirmButton").on('click', function () {
externalLogout();
});
function externalLogout() {
var url, params;
if (accountType== "facebook") {
url = "https://www.facebook.com/logout.php";
params = {
next: redirectUrl,
access_token: encodeURIComponent(accessToken)
};
performCallLogout(url, params, accountType);
} else if (accountType== "google") {
url = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout";
params = {
next: redirectUrl
}
performCallLogout(url, params, accountType);
} else if (accountType == "microsoft") {
url = "https://login.live.com/oauth20_logout.srf";
params = {
clientId: clientID,
redirectUrl: redirectUrl
}
performCallLogout(url, params, accountType);
}
}
function performCallLogout(url, params, accountType) {
if (accountType == "facebook") {
window.location.href = url + "?next=" + params.next + "&access_token=" + params.access_token;
} else if (accountType == "google") {
window.location.href = url + "?continue=" + params.next;
} else if (accountType == "microsoft") {
window.location.href = url + "?client_id=" + params.clientId + "&redirect_url=" + params.redirectUrl;
}
}
希望这有助于某人。
答案 1 :(得分:1)
WebSecurity.Logout();
也会注销该用户。
如果您想确保在注销后令牌不会保留,您可以致电
Session.Remove("facebooktoken"); //Facebook example
信息来自this网页。还有一些值得阅读的细节。
答案 2 :(得分:1)
听起来您想要将用户从源身份验证网站中注销?只有身份验证站点才能删除/修改其cookie。
解决方案是将用户重定向到身份验证站点的注销页面,或使用API脚本将用户注销(如果该站点存在该用户)。您可以使用具有“target”属性的表单如果您不希望主浏览器窗口重定向,请打开一个新窗口。
例如,FaceBook有一个API调用: FB.logout(function(response) {
// user is now logged out
});
MVC FaceBook客户端也有一个方法GetLogoutUrl
,它返回一个你可以在服务器端使用的URL。