Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions samples/Standalone.MvcSample/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.CookiePolicy;
using Microsoft.AspNetCore.Localization;
using ActiveLogin.Authentication.BankId.Core.Launcher;


//
Expand Down Expand Up @@ -76,8 +77,8 @@
bankId.UseQrCoderQrCodeGenerator();
bankId.UseUaParserDeviceDetection();

bankId.AddCustomBrowserByUserAgent(userAgent => userAgent.Contains("Instagram"), "instagram://");
bankId.AddCustomBrowserByUserAgent(userAgent => userAgent.Contains("FBAN") || userAgent.Contains("FBAV"), "fb://");
bankId.AddCustomBrowserByUserAgent(userAgent => userAgent.Contains("Instagram"), context => new BankIdLauncherCustomBrowserConfig(new BrowserScheme("instagram://"), BrowserMightRequireUserInteractionToLaunch.Always));
bankId.AddCustomBrowserByUserAgent(userAgent => userAgent.Contains("FBAN") || userAgent.Contains("FBAV"), context => new BankIdLauncherCustomBrowserConfig(new BrowserScheme("fb://"), BrowserMightRequireUserInteractionToLaunch.Always));

if (configuration.GetValue("ActiveLogin:BankId:UseSimulatedEnvironment", false))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,17 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
[ApiController]
[AllowAnonymous]
[NonController]
public class BankIdUiAuthApiController : BankIdUiApiControllerBase
public class BankIdUiAuthApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector
) : BankIdUiApiControllerBase(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
public BankIdUiAuthApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector)
: base(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
}

[ValidateAntiForgeryToken]
[HttpPost(BankIdConstants.Routes.BankIdApiInitializeActionName)]
public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankIdUiApiInitializeRequest request)
Expand All @@ -44,12 +40,7 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
BankIdFlowInitializeResult bankIdFlowInitializeResult;
try
{
var returnRedirectUrl = Url.Action(BankIdConstants.Routes.BankIdAuthInitActionName, BankIdConstants.Routes.BankIdAuthControllerName, new
{
returnUrl = request.ReturnUrl
}, protocol: Request.Scheme) ?? throw new Exception(BankIdConstants.ErrorMessages.CouldNotGetUrlFor(BankIdConstants.Routes.BankIdAuthControllerName, BankIdConstants.Routes.BankIdAuthInitActionName));

bankIdFlowInitializeResult = await BankIdFlowService.InitializeAuth(uiOptions.ToBankIdFlowOptions(), returnRedirectUrl);
bankIdFlowInitializeResult = await BankIdFlowService.InitializeAuth(uiOptions.ToBankIdFlowOptions(), request.ReturnUrl);
}
catch (BankIdApiException bankIdApiException)
{
Expand All @@ -65,13 +56,9 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
var protectedQrStartState = QrStartStateProtector.Protect(otherDevice.QrStartState);
return OkJsonResult(BankIdUiApiInitializeResponse.ManualLaunch(protectedOrderRef, protectedQrStartState, otherDevice.QrCodeBase64Encoded));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice when sameDevice.BankIdLaunchInfo.DeviceWillReloadPageOnReturnFromBankIdApp:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunch(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndCheckStatus(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndReloadPage(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
default:
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ IBankIdUiOptionsCookieManager uiOptionsCookieManager
[Route($"/[area]/{BankIdConstants.Routes.BankIdPathName}/{BankIdConstants.Routes.BankIdAuthControllerPath}")]
public Task<ActionResult> Init(string returnUrl)
{
return Initialize(returnUrl, BankIdConstants.Routes.BankIdAuthApiControllerName, "Init");
return Initialize(returnUrl, BankIdConstants.Routes.BankIdAuthApiControllerName, nameof(Init));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,19 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
[ApiController]
[AllowAnonymous]
[NonController]
public class BankIdUiPaymentApiController : BankIdUiApiControllerBase
public class BankIdUiPaymentApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector,
IBankIdUiStateProtector bankIdUiStateProtector
) : BankIdUiApiControllerBase(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
private readonly IBankIdUiStateProtector _bankIdUiStateProtector;

public BankIdUiPaymentApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector,
IBankIdUiStateProtector bankIdUiStateProtector)
: base(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
_bankIdUiStateProtector = bankIdUiStateProtector;
}
private readonly IBankIdUiStateProtector _bankIdUiStateProtector = bankIdUiStateProtector;

[ValidateAntiForgeryToken]
[HttpPost(BankIdConstants.Routes.BankIdApiInitializeActionName)]
Expand All @@ -56,11 +51,6 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
BankIdFlowInitializeResult bankIdFlowInitializeResult;
try
{
var returnRedirectUrl = Url.Action(BankIdConstants.Routes.BankIdPaymentInitActionName, BankIdConstants.Routes.BankIdPaymentControllerName, new
{
returnUrl = request.ReturnUrl
}, protocol: Request.Scheme) ?? throw new Exception(BankIdConstants.ErrorMessages.CouldNotGetUrlFor(BankIdConstants.Routes.BankIdPaymentControllerName, BankIdConstants.Routes.BankIdPaymentInitActionName));

bankIdFlowInitializeResult = await BankIdFlowService.InitializePayment(
uiOptions.ToBankIdFlowOptions(),
new BankIdPaymentData(state.BankIdPaymentProperties.TransactionType, state.BankIdPaymentProperties.RecipientName)
Expand All @@ -78,7 +68,7 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
CertificatePolicies = state.BankIdPaymentProperties.BankIdCertificatePolicies,
CardReader = state.BankIdPaymentProperties.CardReader,
},
returnRedirectUrl);
request.ReturnUrl);
}
catch (BankIdApiException bankIdApiException)
{
Expand All @@ -94,13 +84,9 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
var protectedQrStartState = QrStartStateProtector.Protect(otherDevice.QrStartState);
return OkJsonResult(BankIdUiApiInitializeResponse.ManualLaunch(protectedOrderRef, protectedQrStartState, otherDevice.QrCodeBase64Encoded));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice when sameDevice.BankIdLaunchInfo.DeviceWillReloadPageOnReturnFromBankIdApp:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunch(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndCheckStatus(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndReloadPage(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
default:
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ IBankIdUiOptionsCookieManager uiOptionsCookieManager
[Route($"/[area]/{BankIdConstants.Routes.BankIdPathName}/{BankIdConstants.Routes.BankIdPaymentControllerPath}")]
public Task<ActionResult> Init(string returnUrl)
{
return Initialize(returnUrl, BankIdConstants.Routes.BankIdPaymentApiControllerName, "Init");
return Initialize(returnUrl, BankIdConstants.Routes.BankIdPaymentApiControllerName, nameof(Init));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,19 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
[ApiController]
[AllowAnonymous]
[NonController]
public class BankIdUiSignApiController : BankIdUiApiControllerBase
public class BankIdUiSignApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector,
IBankIdUiStateProtector bankIdUiStateProtector
) : BankIdUiApiControllerBase(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
private readonly IBankIdUiStateProtector _bankIdUiStateProtector;

public BankIdUiSignApiController(
IBankIdFlowService bankIdFlowService,
IBankIdUiOrderRefProtector orderRefProtector,
IBankIdQrStartStateProtector qrStartStateProtector,
IBankIdUiOptionsProtector uiOptionsProtector,
IBankIdUiOptionsCookieManager uiOptionsCookieManager,
IBankIdUserMessage bankIdUserMessage,
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
IBankIdUiResultProtector uiAuthResultProtector,
IBankIdUiStateProtector bankIdUiStateProtector)
: base(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, uiOptionsCookieManager, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
{
_bankIdUiStateProtector = bankIdUiStateProtector;
}
private readonly IBankIdUiStateProtector _bankIdUiStateProtector = bankIdUiStateProtector;

[ValidateAntiForgeryToken]
[HttpPost(BankIdConstants.Routes.BankIdApiInitializeActionName)]
Expand All @@ -56,10 +51,6 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
BankIdFlowInitializeResult bankIdFlowInitializeResult;
try
{
var returnRedirectUrl = Url.Action(BankIdConstants.Routes.BankIdSignInitActionName, BankIdConstants.Routes.BankIdSignControllerName, new
{
returnUrl = request.ReturnUrl
}, protocol: Request.Scheme) ?? throw new Exception(BankIdConstants.ErrorMessages.CouldNotGetUrlFor(BankIdConstants.Routes.BankIdSignControllerName, BankIdConstants.Routes.BankIdSignInitActionName));

bankIdFlowInitializeResult = await BankIdFlowService.InitializeSign(
uiOptions.ToBankIdFlowOptions(),
Expand All @@ -74,7 +65,7 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
CertificatePolicies = state.BankIdSignProperties.BankIdCertificatePolicies,
CardReader = state.BankIdSignProperties.CardReader,
},
returnRedirectUrl);
request.ReturnUrl);
}
catch (BankIdApiException bankIdApiException)
{
Expand All @@ -90,13 +81,9 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
var protectedQrStartState = QrStartStateProtector.Protect(otherDevice.QrStartState);
return OkJsonResult(BankIdUiApiInitializeResponse.ManualLaunch(protectedOrderRef, protectedQrStartState, otherDevice.QrCodeBase64Encoded));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice when sameDevice.BankIdLaunchInfo.DeviceWillReloadPageOnReturnFromBankIdApp:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunch(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
case BankIdFlowInitializeLaunchTypeSameDevice sameDevice:
{
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndCheckStatus(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
return OkJsonResult(BankIdUiApiInitializeResponse.AutoLaunchAndReloadPage(protectedOrderRef, sameDevice.BankIdLaunchInfo.LaunchUrl, sameDevice.BankIdLaunchInfo.DeviceMightRequireUserInteractionToLaunchBankIdApp));
}
default:
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ IBankIdUiOptionsCookieManager uiOptionsCookieManager
[Route($"/[area]/{BankIdConstants.Routes.BankIdPathName}/{BankIdConstants.Routes.BankIdSignControllerPath}")]
public Task<ActionResult> Init(string returnUrl)
{
return Initialize(returnUrl, BankIdConstants.Routes.BankIdSignApiControllerName, "Init");
return Initialize(returnUrl, BankIdConstants.Routes.BankIdSignApiControllerName, nameof(Init));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ internal BankIdUiApiInitializeResponse(
bool deviceMightRequireUserInteractionToLaunchBankIdApp,
bool checkStatus,
string orderRef,
string? redirectUri,
string? launchUrl,
string? qrStartState,
string? qrCodeAsBase64)
{
IsAutoLaunch = isAutoLaunch;
DeviceMightRequireUserInteractionToLaunchBankIdApp = deviceMightRequireUserInteractionToLaunchBankIdApp;
CheckStatus = checkStatus;
OrderRef = orderRef;
RedirectUri = redirectUri;
LaunchUrl = launchUrl;
QrStartState = qrStartState;
QrCodeAsBase64 = qrCodeAsBase64;
}
Expand All @@ -25,7 +25,7 @@ internal BankIdUiApiInitializeResponse(
public bool DeviceMightRequireUserInteractionToLaunchBankIdApp { get; }
public bool CheckStatus { get; }
public string OrderRef { get; }
public string? RedirectUri { get; }
public string? LaunchUrl { get; }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is renamed i also needs to be renamed in activelogin-main.ts.

public string? QrStartState { get; set; }
public string? QrCodeAsBase64 { get; set; }

Expand All @@ -35,9 +35,9 @@ public static BankIdUiApiInitializeResponse AutoLaunch(string orderRef, string r
return new BankIdUiApiInitializeResponse(true, showLaunchButton, false, orderRef, redirectUri, null, null);
}

public static BankIdUiApiInitializeResponse AutoLaunchAndCheckStatus(string orderRef, string redirectUri, bool showLaunchButton)
public static BankIdUiApiInitializeResponse AutoLaunchAndReloadPage(string orderRef, string launchUrl, bool showLaunchButton)
{
return new BankIdUiApiInitializeResponse(true, showLaunchButton, true, orderRef, redirectUri, null, null);
return new BankIdUiApiInitializeResponse(true, showLaunchButton, false, orderRef, launchUrl, null, null);
}

public static BankIdUiApiInitializeResponse ManualLaunch(string orderRef, string qrStartState, string qrCodeAsBase64)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,11 @@ protected override async Task HandleChallengeAsync(AuthenticationProperties prop
var detectedDevice = _bankIdSupportedDeviceDetector.Detect();
await _bankIdEventTrigger.TriggerAsync(new BankIdAspNetChallengeSuccessEvent(detectedDevice, uiOptions.ToBankIdFlowOptions()));

var loginUrl = GetInitUiUrl(uiOptions);
var loginUrl = GetInitUiUrl();
Response.Redirect(loginUrl);
}

private string GetInitUiUrl(BankIdUiOptions uiOptions)
private string GetInitUiUrl()
{
var pathBase = Context.Request.PathBase;
var authUrl = pathBase.Add(_authPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

using ActiveLogin.Authentication.BankId.AspNetCore.Cookies;
using ActiveLogin.Authentication.BankId.AspNetCore.DataProtection;
using ActiveLogin.Authentication.BankId.AspNetCore.Launcher;
using ActiveLogin.Authentication.BankId.AspNetCore.StateHandling;
using ActiveLogin.Authentication.BankId.AspNetCore.SupportedDevice;
using ActiveLogin.Authentication.BankId.AspNetCore.UserContext;
using ActiveLogin.Authentication.BankId.AspNetCore.UserContext.Device;
using ActiveLogin.Authentication.BankId.Core;
using ActiveLogin.Authentication.BankId.Core.Launcher;
using ActiveLogin.Authentication.BankId.Core.SupportedDevice;
using ActiveLogin.Authentication.BankId.Core.UserContext;

Expand All @@ -30,6 +32,9 @@ public static void AddDefaultServices(IServiceCollection services)

services.AddTransient<IBankIdEndUserIpResolver, BankIdRemoteIpAddressEndUserIpResolver>();

services.AddTransient<ICustomBrowserResolver, BankIdCustomBrowserResolver>();
services.AddTransient<IBankIdRedirectUrlResolver, BankIdRedirectUrlResolver>();

services.AddHttpContextAccessor();
services.AddTransient<IBankIdUiOptionsCookieManager, BankIdUiOptionsCookieManager>();

Expand Down
Loading
Loading