我们使用 Auth0 作为身份提供者。我们正在努力实现单点注销功能。我们正在寻求 Auth0 支持的帮助,这需要一些时间。感觉我们是第一个正在为基于 .NET 6 的应用程序寻找 SLO 的 Auth0 客户。
我们也有一些限制。我们不想使用 Auth0 JS 库,也不能使用反向通道注销功能。
任何指示都会非常有帮助。
致以最诚挚的问候 S
这对我们有用:-
从 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,我们从声明中获得。
最佳成绩