Auth0:使用 C# 单次注销基于 .NET 6 的应用程序

问题描述 投票:0回答:1

我们使用 Auth0 作为身份提供者。我们正在努力实现单点注销功能。我们正在寻求 Auth0 支持的帮助,这需要一些时间。感觉我们是第一个正在为基于 .NET 6 的应用程序寻找 SLO 的 Auth0 客户。

我们也有一些限制。我们不想使用 Auth0 JS 库,也不能使用反向通道注销功能。

任何指示都会非常有帮助。

致以最诚挚的问候 S

asp.net-core-mvc .net-6.0 auth0
1个回答
0
投票

这对我们有用:-

从 Auth0 的管理 API 中点击会话端点“https://dev.mcc.auth0app.com/oauth/token”并检查 404 状态。如果状态为 404,则意味着该用户注销(用户从其他站点注销)。

在我们的应用程序(浏览器中的第一个选项卡)中,我们有一个指向另一个应用程序的链接。当用户单击该链接时,另一个应用程序将打开(第二个选项卡)。我们从第二个选项卡注销。一旦我们返回主应用程序(第一个选项卡)并访问任何功能,用户应该被重定向到登录屏幕。现在这正在发挥作用。需要进行一些更精细的调整。

实际实现如下:-

在基础控制器中添加了以下方法:-

public override void OnActionExecuting(ActionExecutingContext context)
...
...
...

    if (context.HttpContext.User.Identity!.IsAuthenticated &&
        context.HttpContext.Session.Get("sid") != null)
    {
        
        Task<AccessTokenResponse> tokenTask =  Auth0MgmtApiUtil.GetAccessToken(_auth0Settings, 
            Logger);
    
        if(tokenTask != null)
        {
            tokenResp = tokenTask.Result;
            string tokenType = tokenResp.token_type;
            string token = tokenResp.access_token;
            string sessionId = GetSIDFromClaims("sid");
            Task<string> apiTask = Auth0MgmtApiUtil.GetAuthSession(_auth0Settings.SessionEndpoint, 
                tokenResp, 
                sessionId,
                Logger);
            if (apiTask != null)
            {
                string data = apiTask.Result;
                var sessionMissing = JsonConvert.DeserializeObject<SSOSessionMissingResponse>(data);
                if (sessionMissing != null)
                {
                    // Session was killed
                    // {"statusCode":404,"error":"Not Found","message":"Session not found for ID c7TXfxVkFy5I50z7WdW2pvH6XjoHSEcU10R6w4"}
                    if (sessionMissing.statusCode?.ToString() == "404")
                    {
                        Response.Redirect("/Account/Login");
                        return;
                    }
                }
            }
        }
    
    }

这对我们有用。在我们的应用程序中,我们使用 JavaScript 来访问控制器。

仅供参考 - “sid”来自 Auth0,我们从声明中获得。

最佳成绩

© www.soinside.com 2019 - 2024. All rights reserved.