Asp.net mvc 4 使用oauth从外部登录服务(Gmail、facebook)注销

Asp.net mvc 4 使用oauth从外部登录服务(Gmail、facebook)注销,asp.net-mvc-4,oauth-2.0,logout,Asp.net Mvc 4,Oauth 2.0,Logout,我有一个ASP.NETMVC4应用程序,允许用户使用像Gmail这样的外部服务登录 到目前为止,用户可以在应用程序内部登录和导航。但问题在于注销。在我的AccountController中,我有一个按钮可以注销该请求,调用控制器操作LogOff()。在该方法中,如果用户通过oauth进行了身份验证,如何注销 对于本地帐户,我使用: public ActionResult LogOff() { WebSecurity.Logout();

我有一个ASP.NETMVC4应用程序,允许用户使用像Gmail这样的外部服务登录

到目前为止,用户可以在应用程序内部登录和导航。但问题在于注销。在我的
AccountController
中,我有一个按钮可以注销该请求,调用控制器操作
LogOff()
。在该方法中,如果用户通过oauth进行了身份验证,如何注销

对于本地帐户,我使用:

public ActionResult LogOff()
        {
            WebSecurity.Logout();
            return RedirectToAction("Login", "Account");
        }
但是对于oauth,我没有看到任何类似的东西。。。 我想我需要清除一些cookie,但我不知道如何…

WebSecurity.Logout()
将注销用户,即使他们通过OAuth进行了身份验证

如果要确保令牌在注销后不会持续存在,可以调用

Session.Remove(“facebooktoken”)//Facebook示例

信息来自网页。还有一些更详细的信息值得一读。

WebSecurity.Logout()
将注销用户,即使他们通过OAuth进行了身份验证

如果要确保令牌在注销后不会持续存在,可以调用

Session.Remove(“facebooktoken”)//Facebook示例


信息来自网页。还有一些更详细的信息值得一读。

听起来你想让用户退出源认证站点?只有验证站点才能删除/修改其cookie

解决方案是将用户重定向到身份验证站点的注销页面,或使用API脚本注销用户(如果该站点存在)。如果不希望主浏览器窗口重定向,可以使用带有“target”属性的表单打开新窗口

例如,FaceBook有一个API调用:

FB.注销(功能(响应){
//用户现在已注销
});


MVC FaceBook客户端也有一个方法
GetLogoutUrl
,它返回一个可以在服务器端使用的URL。

听起来你想让用户退出源身份验证站点?只有验证站点才能删除/修改其cookie

解决方案是将用户重定向到身份验证站点的注销页面,或使用API脚本注销用户(如果该站点存在)。如果不希望主浏览器窗口重定向,可以使用带有“target”属性的表单打开新窗口

例如,FaceBook有一个API调用:

FB.注销(功能(响应){
//用户现在已注销
});

MVC FaceBook客户端也有一个方法
GetLogoutUrl
,该方法返回一个可以在服务器端使用的URL。

基于此,我实现了以下客户端解决方案(我之前询问用户是否也想在提供商中注销):

希望这对其他人有所帮助。

基于,我实现了以下客户端解决方案(我之前询问用户是否也想在提供商中注销):


希望这对某人有所帮助。

谢谢,但是删除会话值的解决方案不起作用。。。当我在我的应用程序中注销并尝试使用另一个我无法使用的帐户登录时,我将直接使用以前的帐户登录。。。但如果我注销,例如,在facebook页面,我可以用另一个帐户登录。。。默认情况下,谷歌服务在ExtraData中没有这个令牌……好吧,那么你想从你的应用程序中清除第三方cookie吗?你知道,在帐户管理页面中,如果你想添加登录方法,你可以关联其他帐户。是的,我认为清除cookie应该可以解决这个问题。。。我怎么能做到?你们有一些基本的例子吗?这里有一个关于删除cookie的问题,你们需要知道cookie的名称。不确定是否可能,这取决于FB etc如何命名它们。谢谢,但是删除会话值的解决方案不起作用。。。当我在我的应用程序中注销并尝试使用另一个我无法使用的帐户登录时,我将直接使用以前的帐户登录。。。但如果我注销,例如,在facebook页面,我可以用另一个帐户登录。。。默认情况下,谷歌服务在ExtraData中没有这个令牌……好吧,那么你想从你的应用程序中清除第三方cookie吗?你知道,在帐户管理页面中,如果你想添加登录方法,你可以关联其他帐户。是的,我认为清除cookie应该可以解决这个问题。。。我怎么能做到?你们有一些基本的例子吗?这里有一个关于删除cookie的问题,你们需要知道cookie的名称。不确定是否可能,这取决于FB etc如何命名它们。你在哪里加的,怎么加的,我是一个mvc noob(3小时),我想加上这个,因为我有完全一样的problem@Slartibartfast您可以将其添加到“”标记中,在您的视图中有注销按钮。谢谢!实际上,我用另一种方法修复了它,直接使用FacebookClient()。你是如何在jquery中获得accessToken和accountType的?你在哪里以及如何添加它的,我总共是mvc noob(3个小时),我想添加它,因为我有完全相同的problem@Slartibartfast您可以将其添加到“”标记中,在您的视图中有注销按钮。谢谢!实际上,我用另一种方法修复了它,直接使用FacebookClient()。您是如何在jquery中获得accessToken和accountType的?
//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;
    }
}