Пример #1
0
        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");
        }
Пример #2
0
        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));
        }
Пример #4
0
        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");
            }
        }
Пример #5
0
 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);
 }