Example #1
0
        /// <summary>
        /// This is the function to log in using an apiKey, authenticateServiceKey and a callbackUrl.
        /// The return value will be a sessionid and a return URL.
        /// </summary>
        /// <returns>If the request is successful, the redirectUrl and sessionId is returned</returns>
        public async Task <BankIdFederatedLoginResponse> BankIdFederatedLoginAsync(BankIdFederatedLoginRequest request)
        {
            EnsureValidBankIdServiceKey();

            var queryStringParams = new Dictionary <string, string?>
            {
                { "apiKey", _apiKey },
                { "authenticateServiceKey", _bankIdServiceKey }
            };
            var url      = GetUrl("FederatedLogin", queryStringParams);
            var postData = new Dictionary <string, string?>
            {
                { "callbackUrl", GetBase64EncodedString(request.CallbackUrl) },
                { "deviceChoice", GetBoolString(request.UseChooseDevice) },
                { "thisDevice", GetBoolString(request.UseSameDevice) },
                { "askForSSN", GetBoolString(request.AskForPersonalIdentityNumber) },
                { "personalNumber", request.PersonalIdentityNumber },
                { "mobileBankId", GetBoolString(request.RequireMobileBankId) },
                { "customerURL", GetBase64EncodedString(request.CustomerUrl) },
                { "gui", GetBoolString(request.ShowGui) },
                { "userVisibleData", GetBase64EncodedString(request.SignUserVisibleData) },
                { "userNonVisibleData", GetBase64EncodedString(request.SignUserNonVisibleData) }
            };

            var fullResponse = await PostFullResponseAndEnsureSuccess <BankIdFederatedLoginFullResponse>(url, postData);

            return(new BankIdFederatedLoginResponse(fullResponse));
        }
        public async void BankIdFederatedLoginAsync_WithAllValues__ShouldPostToGrandIdFederatedLogin_WithAllValues()
        {
            // Arrange
            var bankIdFederatedLoginRequest = new BankIdFederatedLoginRequest(
                callbackUrl: "https://cb/",
                useChooseDevice: true,
                useSameDevice: true,
                askForPersonalIdentityNumber: true,
                personalIdentityNumber: "20180101239",
                requireMobileBankId: true,
                customerUrl: "https://cu/",
                showGui: true,
                signUserVisibleData: "uvd",
                signUserNonVisibleData: "unvd"
                );

            // Act
            await _grandIdApiClient.BankIdFederatedLoginAsync(bankIdFederatedLoginRequest);

            // Assert
            var request       = _messageHandlerMock.GetFirstArgumentOfFirstInvocation <HttpMessageHandler, HttpRequestMessage>();
            var contentString = await request.Content.ReadAsStringAsync();

            Assert.Contains("callbackUrl=aHR0cHM6Ly9jYi8%3D", contentString);
            Assert.Contains("deviceChoice=true", contentString);
            Assert.Contains("thisDevice=true", contentString);
            Assert.Contains("askForSSN=true", contentString);
            Assert.Contains("personalNumber=20180101239", contentString);
            Assert.Contains("mobileBankId=true", contentString);
            Assert.Contains("customerURL=aHR0cHM6Ly9jdS8%3D", contentString);
            Assert.Contains("gui=true", contentString);
            Assert.Contains("userVisibleData=dXZk", contentString);
            Assert.Contains("userNonVisibleData=dW52ZA%3D%3D", contentString);
        }