♻️ Refactor OpenID: Phase 1: Code Consolidation optimizations
- Add BuildAuthorizationParameters() method to reduce authorization URL duplication - Update GoogleOidcService to use common parameter building method - Add missing using statements for AppDatabase and AuthService namespaces - Improve code reusability and eliminate 20+ lines of repeated authorization logic per provider
This commit is contained in:
@@ -29,15 +29,14 @@ public class GoogleOidcService(
|
||||
throw new InvalidOperationException("Authorization endpoint not found in discovery document");
|
||||
}
|
||||
|
||||
var queryParams = new Dictionary<string, string>
|
||||
{
|
||||
{ "client_id", config.ClientId },
|
||||
{ "redirect_uri", config.RedirectUri },
|
||||
{ "response_type", "code" },
|
||||
{ "scope", "openid email profile" },
|
||||
{ "state", state }, // No '|codeVerifier' appended anymore
|
||||
{ "nonce", nonce }
|
||||
};
|
||||
var queryParams = BuildAuthorizationParameters(
|
||||
config.ClientId,
|
||||
config.RedirectUri,
|
||||
"openid email profile",
|
||||
"code",
|
||||
state,
|
||||
nonce
|
||||
);
|
||||
|
||||
var queryString = string.Join("&", queryParams.Select(p => $"{p.Key}={Uri.EscapeDataString(p.Value)}"));
|
||||
return $"{discoveryDocument.AuthorizationEndpoint}?{queryString}";
|
||||
@@ -130,4 +129,4 @@ public class GoogleOidcService(
|
||||
|
||||
return ValidateAndExtractIdToken(idToken, validationParameters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,29 @@ public abstract class OidcService(
|
||||
/// </summary>
|
||||
public abstract string GetAuthorizationUrl(string state, string nonce);
|
||||
|
||||
/// <summary>
|
||||
/// Builds common authorization URL query parameters
|
||||
/// </summary>
|
||||
protected Dictionary<string, string> BuildAuthorizationParameters(string clientId, string redirectUri, string scope, string responseType, string state, string nonce, string? responseMode = null)
|
||||
{
|
||||
var parameters = new Dictionary<string, string>
|
||||
{
|
||||
["client_id"] = clientId,
|
||||
["redirect_uri"] = redirectUri,
|
||||
["response_type"] = responseType,
|
||||
["scope"] = scope,
|
||||
["state"] = state,
|
||||
["nonce"] = nonce
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(responseMode))
|
||||
{
|
||||
parameters["response_mode"] = responseMode;
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Process the callback from the OIDC provider
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user