public Task <T> PostAsync <T>(IRestRequest postRequest, CancellationToken cancellationToken)
        {
            if (postRequest is SFRestRequest)
            {
                // authenticator
                AuthnResponse authnResponse = new AuthnResponse
                {
                    success = true,
                    data    = new AuthnResponseData
                    {
                        tokenUrl = TokenUrl,
                        ssoUrl   = SSOUrl,
                    }
                };

                return(Task.FromResult <T>((T)(object)authnResponse));
            }
            else
            {
                //idp onetime token
                IdpTokenResponse tokenResponse = new IdpTokenResponse
                {
                    CookieToken = "cookie",
                };
                return(Task.FromResult <T>((T)(object)tokenResponse));
            }
        }
Example #2
0
        public Task <T> PostAsync <T>(IRestRequest postRequest, CancellationToken cancellationToken)
        {
            SFRestRequest sfRequest = (SFRestRequest)postRequest;

            if (sfRequest.jsonBody is AuthnRequest)
            {
                AuthnResponse authnResponse = new AuthnResponse
                {
                    data = new AuthnResponseData()
                    {
                        token                   = "session_token",
                        masterToken             = "master_token",
                        authResponseSessionInfo = new SessionInfo(),
                        nameValueParameter      = new List <NameValueParameter>()
                    },
                    success = true
                };

                // login request return success
                return(Task.FromResult <T>((T)(object)authnResponse));
            }
            CloseResponse closeResponse = new CloseResponse
            {
                message = "Session no longer exists.  New login required to access the service.",
                data    = null,
                code    = SESSION_GONE,
                success = false
            };

            return(Task.FromResult <T>((T)(object)closeResponse));
        }
 public ActionResult Consumer(string samlResponse, string relayState) {
     var bytes = Convert.FromBase64String(samlResponse);
     var xmlString = Encoding.UTF8.GetString(bytes);
     AuthnResponse respose = new AuthnResponse(xmlString);
     if (respose.IsValid()) {
         var userName = respose.GetNameID();
         var returnUrl = Session[relayState].ToString();
         return RedirectToAction("Login", "Account", new { UserName = userName, ReturnUrl = returnUrl });
     } else {
         return View();
     }
 }
        public Task <T> PostAsync <T>(IRestRequest request, CancellationToken cancellationToken)
        {
            SFRestRequest sfRequest = (SFRestRequest)request;

            if (sfRequest.jsonBody is AuthnRequest)
            {
                AuthnResponse authnResponse = new AuthnResponse
                {
                    data = new AuthnResponseData()
                    {
                        token                   = "session_token",
                        masterToken             = "master_token",
                        authResponseSessionInfo = new SessionInfo(),
                        nameValueParameter      = new List <NameValueParameter>()
                    },
                    success = true
                };

                // login request return success
                return(Task.FromResult <T>((T)(object)authnResponse));
            }
            else if (sfRequest.jsonBody is QueryRequest)
            {
                QueryExecResponse queryExecResponse = new QueryExecResponse
                {
                    success = false,
                    code    = QUERY_IN_EXEC_CODE
                };
                return(Task.FromResult <T>((T)(object)queryExecResponse));
            }
            else if (sfRequest.jsonBody is RenewSessionRequest)
            {
                return(Task.FromResult <T>((T)(object)new RenewSessionResponse
                {
                    success = true,
                    data = new RenewSessionResponseData()
                    {
                        sessionToken = "new_session_token"
                    }
                }));
            }
            else
            {
                return(Task.FromResult <T>((T)(object)null));
            }
        }
        public void ShouldSerializeAuthnResponseAttributes()
        {
            #region Arrange

            string responseWithAttributes = @"<?xml version='1.0' encoding='UTF-8'?>
                <samlp:Response
                     xmlns:samlp = 'urn:oasis:names:tc:SAML:2.0:protocol'
                    ID = '_622edc75-4251-4069-bd0f-cf96a504e83b'
                    Version = '2.0'
                    IssueInstant = '2020-02-28T09:34:06.325Z'
                    Destination = 'https://someSp/start'
                    Consent = 'urn:oasis:names:tc:SAML:2.0:consent:unspecified'
                    InResponseTo = 'ONELOGIN_4fee3b046395c4e751011e97f8900b5273d56685'
                    >
                </samlp:Response >";

            #endregion

            #region Act

            AuthnResponse result = this.service.Deserialize <AuthnResponse>(responseWithAttributes);

            #endregion

            #region Assert

            Assert.NotNull(result);
            Assert.Equal("_622edc75-4251-4069-bd0f-cf96a504e83b", result.Id);
            Assert.Equal("2.0", result.Version);
            Assert.Equal(DateTimeOffset.Parse("2020-02-28T09:34:06.325Z"), result.IssueInstant);
            Assert.Equal("https://someSp/start", result.Destination);
            Assert.Equal("ONELOGIN_4fee3b046395c4e751011e97f8900b5273d56685", result.InResponseTo);

            this.logger.Received(1).LogInformation($"Unknown attribute found serializing xml - Consent with value urn:oasis:names:tc:SAML:2.0:consent:unspecified.");

            #endregion
        }
        public Task <T> PostAsync <T>(IRestRequest request, CancellationToken cancellationToken)
        {
            var message = request.ToRequestMessage(HttpMethod.Post);
            var param   = new NameValueParameter {
                name = "SERVICE_NAME"
            };

            if (!message.Headers.Contains("X-Snowflake-Service"))
            {
                param.value = INIT_SERVICE_NAME;
            }
            else
            {
                IEnumerable <string> headerValues = message.Headers.GetValues("X-Snowflake-Service");
                foreach (string value in headerValues)
                {
                    param.value = value + 'a';
                }
            }

            SFRestRequest sfRequest = (SFRestRequest)request;

            if (sfRequest.jsonBody is AuthnRequest)
            {
                AuthnResponse authnResponse = new AuthnResponse
                {
                    data = new AuthnResponseData()
                    {
                        token                   = "session_token",
                        masterToken             = "master_token",
                        authResponseSessionInfo = new SessionInfo(),
                        nameValueParameter      = new List <NameValueParameter>()
                        {
                            param
                        }
                    },
                    success = true
                };

                // login request return success
                return(Task.FromResult <T>((T)(object)authnResponse));
            }
            else if (sfRequest.jsonBody is QueryRequest)
            {
                QueryExecResponse queryExecResponse = new QueryExecResponse
                {
                    success = true,
                    data    = new QueryExecResponseData
                    {
                        rowSet = new string[, ] {
                            { "1" }
                        },
                        rowType = new List <ExecResponseRowType>()
                        {
                            new ExecResponseRowType
                            {
                                name = "colone",
                                type = "FIXED"
                            }
                        },
                        parameters = new List <NameValueParameter> {
                            param
                        }
                    }
                };
                return(Task.FromResult <T>((T)(object)queryExecResponse));
            }
            else
            {
                return(Task.FromResult <T>((T)(object)null));
            }
        }
        public Task <T> PostAsync <T>(SFRestRequest postRequest, CancellationToken cancellationToken)
        {
            if (postRequest.jsonBody is AuthnRequest)
            {
                AuthnResponse authnResponse = new AuthnResponse
                {
                    data = new AuthnResponseData()
                    {
                        token                   = EXPIRED_SESSION_TOKEN,
                        masterToken             = "master_token",
                        authResponseSessionInfo = new SessionInfo(),
                        nameValueParameter      = new List <NameValueParameter>()
                    },
                    success = true
                };

                // login request return success
                return(Task.FromResult <T>((T)(object)authnResponse));
            }
            else if (postRequest.jsonBody is QueryRequest)
            {
                if (postRequest.authorizationToken.Equals(String.Format(TOKEN_FMT, EXPIRED_SESSION_TOKEN)))
                {
                    QueryExecResponse queryExecResponse = new QueryExecResponse
                    {
                        success = false,
                        code    = SESSION_EXPIRED_CODE
                    };
                    return(Task.FromResult <T>((T)(object)queryExecResponse));
                }
                else if (postRequest.authorizationToken.Equals(String.Format(TOKEN_FMT, "new_session_token")))
                {
                    QueryExecResponse queryExecResponse = new QueryExecResponse
                    {
                        success = true,
                        data    = new QueryExecResponseData
                        {
                            rowSet = new string[, ] {
                                { "1" }
                            },
                            rowType = new List <ExecResponseRowType>()
                            {
                                new ExecResponseRowType
                                {
                                    name = "colone",
                                    type = "FIXED"
                                }
                            },
                            parameters = new List <NameValueParameter>()
                        }
                    };
                    return(Task.FromResult <T>((T)(object)queryExecResponse));
                }
                else
                {
                    QueryExecResponse queryExecResponse = new QueryExecResponse
                    {
                        success = false,
                        code    = 1
                    };
                    return(Task.FromResult <T>((T)(object)queryExecResponse));
                }
            }
            else if (postRequest.jsonBody is RenewSessionRequest)
            {
                return(Task.FromResult <T>((T)(object)new RenewSessionResponse
                {
                    success = true,
                    data = new RenewSessionResponseData()
                    {
                        sessionToken = "new_session_token",
                        masterToken = "new_master_token"
                    }
                }));
            }
            else
            {
                return(Task.FromResult <T>((T)(object)null));
            }
        }