public string MapTokenRequestError(WebTokenRequestStatus status, uint errorCode, bool isInteractive) { if (status == WebTokenRequestStatus.UserInteractionRequired) { return(MsalError.InteractionRequired); } if (status == WebTokenRequestStatus.ProviderError) { if (errorCode == 0xcaa20005) { return("WAM_server_temporarily_unavailable"); } unchecked // as per https://stackoverflow.com/questions/34198173/conversion-of-hresult-between-c-and-c-sharp { var hresultFacility = (((errorCode) >> 16) & 0x1fff); if (hresultFacility == 0xAA3 || // FACILITY_ADAL_HTTP in AAD WAM plugin hresultFacility == 0xAA7 || // FACILITY_ADAL_URLMON in AAD WAM plugin hresultFacility == 0xAA8) // FACILITY_ADAL_INTERNET in AAD WAM plugin { return("WAM_no_network"); } if (hresultFacility == 0xAA1) // FACILITY_ADAL_DEVELOPER in AAD WAM plugin { return("WAM_internal_error_ApiContractViolation"); } } } return("WAM_unexpected_aad_error"); }
public string MapTokenRequestError(WebTokenRequestStatus status, uint errorCode, bool isInteractive) { if (status != WebTokenRequestStatus.UserInteractionRequired) { return(MsaErrorCode); } // TODO: can further drill into errors by looking at HResult // https://github.com/AzureAD/microsoft-authentication-library-for-cpp/blob/75de1a8aee5f83d86941de6081fa351f207d9446/source/windows/broker/MSATokenRequest.cpp#L104 return(MsalError.InteractionRequired); }
public Tuple <string, string, bool> MapTokenRequestError(WebTokenRequestStatus status, uint errorCode, bool isInteractive) { if (status == WebTokenRequestStatus.UserInteractionRequired) { return(Tuple.Create(MsalError.InteractionRequired, "", false)); } if (status == WebTokenRequestStatus.ProviderError) { switch (errorCode) { case ERROR_ADAL_SERVER_ERROR_TEMPORARILY_UNAVAILABLE: case ERROR_ADAL_SERVER_ERROR_RECEIVED: // ERROR_ADAL_SERVER_ERROR_RECEIVED in AAD WAM plugin return(Tuple.Create("WAM_server_temporarily_unavailable", $"Windows broker server unavailable. Error: {errorCode}", true)); case BT_E_SPURIOUS_ACTIVATION: // BT_E_SPURIOUS_ACTIVATION in AAD WAM plugin return(Tuple.Create("WAM_plugin_process_interrupted", "Either WAM plugin process didn’t start, or WAM plugin process didn’t finish in expected protocol.", true)); } unchecked // as per https://stackoverflow.com/questions/34198173/conversion-of-hresult-between-c-and-c-sharp { var hresultFacility = (((errorCode) >> 16) & 0x1fff); switch (hresultFacility) { case FACILITY_ADAL_HTTP: // FACILITY_ADAL_HTTP in AAD WAM plugin case FACILITY_ADAL_URLMON: // FACILITY_ADAL_URLMON in AAD WAM plugin case FACILITY_ADAL_INTERNET: // FACILITY_ADAL_INTERNET in AAD WAM plugin return(Tuple.Create("WAM_no_network", $"Windows broker network issue. HR result facility: {hresultFacility}", true)); case FACILITY_ADAL_BACKGROUND_INFRASTRUCTURE: // FACILITY_ADAL_BACKGROUND_INFRASTRUCTURE in AAD WAM plugin return(Tuple.Create($"WAM_background_infrastructure_cancelled", "Background infrastructure cancelled due to not enough resources at the moment.", true)); case FACILITY_ADAL_DEVELOPER: // FACILITY_ADAL_DEVELOPER in AAD WAM plugin return(Tuple.Create("WAM_internal_error_ApiContractViolation", "", false)); default: return(Tuple.Create($"WAM_aad_provider_error_{errorCode}", "", false)); } } } return(Tuple.Create("WAM_unexpected_aad_error", "", false)); }
private static SignInStatus ConvertWebTokenRequestStatus(WebTokenRequestStatus status) { switch (status) { case WebTokenRequestStatus.Success: return(SignInStatus.Success); case WebTokenRequestStatus.UserCancel: return(SignInStatus.UserCancel); case WebTokenRequestStatus.UserInteractionRequired: return(SignInStatus.UserInteractionRequired); case WebTokenRequestStatus.AccountSwitch: case WebTokenRequestStatus.AccountProviderNotAvailable: case WebTokenRequestStatus.ProviderError: throw new XboxException("Unexpected WebTokenRequestStatus"); default: throw new ArgumentOutOfRangeException("WebTokenRequestStatus"); } }
private void RaiseLoginFailed(WebTokenRequestStatus e) { Debug.WriteLine($"LoginFailed: {e}"); LoginFailed?.Invoke(this, e); }
public static bool IsSuccessStatus(this WebTokenRequestStatus status) { return(status == WebTokenRequestStatus.Success || status == WebTokenRequestStatus.AccountSwitch); }