🚚 Move callback to under api
This commit is contained in:
@@ -128,7 +128,7 @@ public class ConnectionController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[Route("/auth/callback/{provider}")]
|
[Route("/api/auth/callback/{provider}")]
|
||||||
[HttpGet, HttpPost]
|
[HttpGet, HttpPost]
|
||||||
public async Task<IActionResult> HandleCallback([FromRoute] string provider)
|
public async Task<IActionResult> HandleCallback([FromRoute] string provider)
|
||||||
{
|
{
|
||||||
@@ -142,10 +142,10 @@ public class ConnectionController(
|
|||||||
|
|
||||||
// Get the state from the cache
|
// Get the state from the cache
|
||||||
var stateKey = $"{StateCachePrefix}{callbackData.State}";
|
var stateKey = $"{StateCachePrefix}{callbackData.State}";
|
||||||
|
|
||||||
// Try to get the state as OidcState first (new format)
|
// Try to get the state as OidcState first (new format)
|
||||||
var oidcState = await cache.GetAsync<OidcState>(stateKey);
|
var oidcState = await cache.GetAsync<OidcState>(stateKey);
|
||||||
|
|
||||||
// If not found, try to get as string (legacy format)
|
// If not found, try to get as string (legacy format)
|
||||||
if (oidcState == null)
|
if (oidcState == null)
|
||||||
{
|
{
|
||||||
@@ -153,7 +153,7 @@ public class ConnectionController(
|
|||||||
if (string.IsNullOrEmpty(stateValue) || !OidcState.TryParse(stateValue, out oidcState) || oidcState == null)
|
if (string.IsNullOrEmpty(stateValue) || !OidcState.TryParse(stateValue, out oidcState) || oidcState == null)
|
||||||
return BadRequest("Invalid or expired state parameter");
|
return BadRequest("Invalid or expired state parameter");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the state from cache to prevent replay attacks
|
// Remove the state from cache to prevent replay attacks
|
||||||
await cache.RemoveAsync(stateKey);
|
await cache.RemoveAsync(stateKey);
|
||||||
|
|
||||||
@@ -309,14 +309,14 @@ public class ConnectionController(
|
|||||||
if (connection != null)
|
if (connection != null)
|
||||||
{
|
{
|
||||||
// Login existing user
|
// Login existing user
|
||||||
var deviceId = !string.IsNullOrEmpty(callbackData.State) ?
|
var deviceId = !string.IsNullOrEmpty(callbackData.State) ?
|
||||||
callbackData.State.Split('|').FirstOrDefault() :
|
callbackData.State.Split('|').FirstOrDefault() :
|
||||||
string.Empty;
|
string.Empty;
|
||||||
|
|
||||||
var challenge = await oidcService.CreateChallengeForUserAsync(
|
var challenge = await oidcService.CreateChallengeForUserAsync(
|
||||||
userInfo,
|
userInfo,
|
||||||
connection.Account,
|
connection.Account,
|
||||||
HttpContext,
|
HttpContext,
|
||||||
deviceId ?? string.Empty);
|
deviceId ?? string.Empty);
|
||||||
return Redirect($"/auth/callback?challenge={challenge.Id}");
|
return Redirect($"/auth/callback?challenge={challenge.Id}");
|
||||||
}
|
}
|
||||||
@@ -355,18 +355,18 @@ public class ConnectionController(
|
|||||||
data.State = Uri.UnescapeDataString(request.Query["state"].FirstOrDefault() ?? "");
|
data.State = Uri.UnescapeDataString(request.Query["state"].FirstOrDefault() ?? "");
|
||||||
break;
|
break;
|
||||||
case "POST" when request.HasFormContentType:
|
case "POST" when request.HasFormContentType:
|
||||||
{
|
{
|
||||||
var form = await request.ReadFormAsync();
|
var form = await request.ReadFormAsync();
|
||||||
data.Code = Uri.UnescapeDataString(form["code"].FirstOrDefault() ?? "");
|
data.Code = Uri.UnescapeDataString(form["code"].FirstOrDefault() ?? "");
|
||||||
data.IdToken = Uri.UnescapeDataString(form["id_token"].FirstOrDefault() ?? "");
|
data.IdToken = Uri.UnescapeDataString(form["id_token"].FirstOrDefault() ?? "");
|
||||||
data.State = Uri.UnescapeDataString(form["state"].FirstOrDefault() ?? "");
|
data.State = Uri.UnescapeDataString(form["state"].FirstOrDefault() ?? "");
|
||||||
if (form.ContainsKey("user"))
|
if (form.ContainsKey("user"))
|
||||||
data.RawData = Uri.UnescapeDataString(form["user"].FirstOrDefault() ?? "");
|
data.RawData = Uri.UnescapeDataString(form["user"].FirstOrDefault() ?? "");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user