/// <summary> /// Get Authorization Url /// </summary> /// <param name="scopes"></param> /// <returns></returns> public string GetAuthorizationURL(List <OidcScopes> scopes) { //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); string scopeValue = ""; for (var index = 0; index < scopes.Count; index++) { scopeValue += scopes[index].GetStringValue() + " "; } scopeValue = scopeValue.TrimEnd(); //creating CSRF token since client did not send one CSRFToken = GenerateCSRFToken(); //builiding authorization request string authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}", DiscoveryDoc.AuthorizeEndpoint, ClientID, Uri.EscapeDataString(scopeValue), Uri.EscapeDataString(RedirectURI), CSRFToken); //Logging authorization request AdvancedLogger.Log("Logging AuthorizationRequest:" + authorizationRequest); return(authorizationRequest); }
/// <summary> /// Get Authorization Url /// </summary> /// <param name="scopes"></param> /// <param name="CSRFToken"></param> /// <returns></returns> public string GetAuthorizationURL(List <OidcScopes> scopes, string CSRFToken) { AdvancedLoggerEnabled = true; //Set internal property to track only informational -intuit_tid based logs if (EnableAdvancedLoggerInfoMode == true) { ShowInfoLogs = true; } //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); string scopeValue = ""; for (var index = 0; index < scopes.Count; index++) { scopeValue += scopes[index].GetStringValue() + " "; } scopeValue = scopeValue.TrimEnd(); this.CSRFToken = CSRFToken; //builiding authorization request string authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}", DiscoveryDoc.AuthorizeEndpoint, ClientID, Uri.EscapeDataString(scopeValue), Uri.EscapeDataString(RedirectURI), CSRFToken); //Logging authorization request AdvancedLogger.Log("Logging AuthorizationRequest:" + authorizationRequest); return(authorizationRequest); }
/// <summary> /// Gets the Request Response Logging mechanism for advanced logging using serilog. /// </summary> /// <returns>Returns value which specifies the request response logging mechanism.</returns> public static AdvancedLogging GetAdvancedLogging(bool enableSerilogRequestResponseLoggingForDebug, bool enableSerilogRequestResponseLoggingForTrace, bool enableSerilogRequestResponseLoggingForConsole, bool enableSerilogRequestResponseLoggingForRollingFile, string serviceRequestLoggingLocationForFile) { AdvancedLogging advancedLogger; advancedLogger = new AdvancedLogging(enableSerilogRequestResponseLoggingForDebug: enableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: enableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: enableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: enableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: serviceRequestLoggingLocationForFile); return(advancedLogger); }
/// <summary> /// Get User Info /// </summary> /// <param name="accessToken"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <UserInfoResponse> GetUserInfoAsync(string accessToken, CancellationToken cancellationToken = default(CancellationToken)) { //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); UserInfoClient userInfoClient = new UserInfoClient(DiscoveryDoc.UserInfoEndpoint); return(await userInfoClient.GetAsync(accessToken, cancellationToken).ConfigureAwait(false)); }
/// <summary> /// Refreshes access token to get new access token /// </summary> /// <param name="refreshToken"></param> /// <param name="extra"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <TokenResponse> RefreshTokenAsync(string refreshToken, object extra = null, CancellationToken cancellationToken = default(CancellationToken)) { //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); var tokenClient = new TokenClient(DiscoveryDoc.TokenEndpoint, ClientID, ClientSecret); return(await tokenClient.RequestRefreshTokenAsync(refreshToken, cancellationToken).ConfigureAwait(false)); }
///// <summary> ///// Get Authorization Url ///// </summary> ///// <param name="scopes"></param> ///// <param name="CSRFToken"></param> ///// <param name="getRealmId"></param> ///// <returns></returns> //public string GetAuthorizationURL(List<OidcScopes> scopes, string CSRFToken, bool getRealmId ) //{ // string scopeValue = ""; // string realmIdJson = OidcConstants.AuthorizeRequest.IdToken_ReamId; // string authorizationRequest = ""; // for (var index = 0; index < scopes.Count; index++) // { // scopeValue += scopes[index].GetStringValue() + " "; // } // scopeValue = scopeValue.TrimEnd(); // this.CSRFToken = CSRFToken; // if (getRealmId == true) // { // authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}&claims={5}", // DiscoveryDoc.AuthorizeEndpoint, // ClientID, // Uri.EscapeDataString(scopeValue), // Uri.EscapeDataString(RedirectURI), // Uri.EscapeDataString(realmIdJson), // CSRFToken); // } // else // { // authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}", // DiscoveryDoc.AuthorizeEndpoint, // ClientID, // Uri.EscapeDataString(scopeValue), // Uri.EscapeDataString(RedirectURI), // CSRFToken); // } // return authorizationRequest; //} ///// <summary> ///// Get Authorization Url ///// </summary> ///// <param name="scopes"></param> ///// <param name="CSRFToken"></param> ///// <param name="getRealmId"></param> ///// <returns></returns> //public string GetAuthorizationURL(List<OidcScopes> scopes, bool getRealmId) //{ // string scopeValue = ""; // string realmIdJson = OidcConstants.AuthorizeRequest.IdToken_ReamId; // string authorizationRequest = ""; // for (var index = 0; index < scopes.Count; index++) // { // scopeValue += scopes[index].GetStringValue() + " "; // } // scopeValue = scopeValue.TrimEnd(); // this.CSRFToken = GenerateCSRFToken(); // if (getRealmId == true) // { // authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}&claims={5}", // DiscoveryDoc.AuthorizeEndpoint, // ClientID, // Uri.EscapeDataString(scopeValue), // Uri.EscapeDataString(RedirectURI), // Uri.EscapeDataString(realmIdJson), // CSRFToken); // } // else // { // authorizationRequest = string.Format("{0}?client_id={1}&response_type=code&scope={2}&redirect_uri={3}&state={4}", // DiscoveryDoc.AuthorizeEndpoint, // ClientID, // Uri.EscapeDataString(scopeValue), // Uri.EscapeDataString(RedirectURI), // CSRFToken); // } // return authorizationRequest; //} ///// <summary> ///// Validates ID token ///// </summary> ///// <param name="idToken"></param> ///// <returns></returns> //public string GetRealmIdFromIDTokenAsync(string idToken) //{ // if (idToken != null) // { // string[] splitValues = idToken.Split('.'); // if (splitValues[1] != null) // { // var payloadJson = Encoding.UTF8.GetString(Base64Url.Decode(splitValues[1].ToString())); // IdTokenJWTClaimTypes payloadData = JsonConvert.DeserializeObject<IdTokenJWTClaimTypes>(payloadJson); // if (payloadData.RealmId != null) // { // return payloadData.RealmId.ToString(); // } // } // } // return null; //} #endregion /// <summary> /// Gets Bearer token from Authorization code /// </summary> /// <param name="code"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <TokenResponse> GetBearerTokenAsync(string code, CancellationToken cancellationToken = default(CancellationToken)) { //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); var tokenClient = new TokenClient(DiscoveryDoc.TokenEndpoint, ClientID, ClientSecret); return(await tokenClient.RequestTokenFromCodeAsync(code, RedirectURI, cancellationToken : cancellationToken).ConfigureAwait(false)); }
/// <summary> /// Revoke token using either access or refresh token /// </summary> /// <param name="accessOrRefreshToken"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <TokenRevocationResponse> RevokeTokenAsync(string accessOrRefreshToken, CancellationToken cancellationToken = default(CancellationToken)) { AdvancedLoggerEnabled = true; //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); TokenRevocationClient revokeTokenClient = new TokenRevocationClient(DiscoveryDoc.RevocationEndpoint, ClientID, ClientSecret); return(await revokeTokenClient.RevokeAsync(new TokenRevocationRequest { Token = accessOrRefreshToken, }, cancellationToken).ConfigureAwait(false)); }
/// <summary> /// Refreshes access token to get new access token /// </summary> /// <param name="refreshToken"></param> /// <param name="extra"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <TokenResponse> RefreshTokenAsync(string refreshToken, object extra = null, CancellationToken cancellationToken = default(CancellationToken)) { AdvancedLoggerEnabled = true; //Set internal property to track only informational -intuit_tid based logs if (EnableAdvancedLoggerInfoMode == true) { ShowInfoLogs = true; } //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); var tokenClient = new TokenClient(DiscoveryDoc.TokenEndpoint, ClientID, ClientSecret); return(await tokenClient.RequestRefreshTokenAsync(refreshToken, cancellationToken).ConfigureAwait(false)); }
/// <summary> /// Get User Info /// </summary> /// <param name="accessToken"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <UserInfoResponse> GetUserInfoAsync(string accessToken, CancellationToken cancellationToken = default(CancellationToken)) { AdvancedLoggerEnabled = true; //Set internal property to track only informational -intuit_tid based logs if (EnableAdvancedLoggerInfoMode == true) { ShowInfoLogs = true; } //Intialize Logger AdvancedLogger = LogHelper.GetAdvancedLogging(enableSerilogRequestResponseLoggingForDebug: this.EnableSerilogRequestResponseLoggingForDebug, enableSerilogRequestResponseLoggingForTrace: this.EnableSerilogRequestResponseLoggingForTrace, enableSerilogRequestResponseLoggingForConsole: this.EnableSerilogRequestResponseLoggingForConsole, enableSerilogRequestResponseLoggingForRollingFile: this.EnableSerilogRequestResponseLoggingForRollingFile, serviceRequestLoggingLocationForFile: this.ServiceRequestLoggingLocationForFile); UserInfoClient userInfoClient = new UserInfoClient(DiscoveryDoc.UserInfoEndpoint); return(await userInfoClient.GetAsync(accessToken, cancellationToken).ConfigureAwait(false)); }