public string GetCodeGrantFlowUrl(PermissionsRequestType[] scope, AuthenticationPromptType prompt = AuthenticationPromptType.None, string state = "") { var authorizationUrl = new StringBuilder(AuthorizeBaseUrl); AppendGeneralParameters(scope, prompt, state, authorizationUrl); authorizationUrl.Append($"&response_type=code"); return(authorizationUrl.ToString()); }
public string GetImplicitGrantFlowUrl(PermissionsRequestType[] scope, AuthenticationPromptType prompt = AuthenticationPromptType.None, ExpiryType expiresIn = ExpiryType.OneDay, string state = "") { var authorizationUrl = new StringBuilder(AuthorizeBaseUrl); AppendGeneralParameters(scope, prompt, state, authorizationUrl); authorizationUrl.Append($"&response_type=token"); authorizationUrl.Append($"&expires_in={expiresIn}"); return(authorizationUrl.ToString()); }
public string GetCodeGrantFlowWithPkceUrl(PermissionsRequestType[] scope, AuthenticationPromptType prompt = AuthenticationPromptType.None, string state = "") { var authorizationUrl = new StringBuilder(AuthorizeBaseUrl); AppendGeneralParameters(scope, prompt, state, authorizationUrl); if (!string.IsNullOrWhiteSpace(_internalCodeVerifier)) { //TODO throw ex } _internalCodeVerifier = Helpers.ToBase64UrlEncodedString(Encoding.ASCII.GetBytes(Guid.NewGuid().ToString("X"))); authorizationUrl.Append($"&response_type=code"); authorizationUrl.Append($"&code_challenge_method=S256"); //TODO add note about not supporting 'plain' authorizationUrl.Append($"&code_challenge={Helpers.ToBase64UrlEncodedString(SHA256.Create().ComputeHash(Encoding.ASCII.GetBytes(_internalCodeVerifier)))}"); return(authorizationUrl.ToString()); }
private void AppendGeneralParameters(PermissionsRequestType[] scope, AuthenticationPromptType prompt, string state, StringBuilder authorizationUrl) { authorizationUrl.Append($"?client_id={ApplicationCredentials.ClientId}"); authorizationUrl.Append($"&scope={Uri.EscapeDataString(string.Join(" ", scope.Select(s => s.ToString().ToLower())))}"); authorizationUrl.Append($"&redirect_uri={Uri.EscapeDataString(ApplicationCredentials.RedirectUri.ToString())}"); authorizationUrl.Append($"&prompt={prompt.ToString().ToLower()}"); if (ApplicationCredentials.UseOwnCsrfProtection) { state = Helpers.ToBase64UrlEncodedString(Encoding.ASCII.GetBytes(Guid.NewGuid().ToString("X"))); } if (!string.IsNullOrWhiteSpace(state)) { _internalState = state; authorizationUrl.Append($"&state={state}"); } }