Skip to content

Commit e7d3d2b

Browse files
@W-18777800: [qr code scan][ios] we should prevent a successful login of client A by scanning QR code of client B
1 parent 6d8147b commit e7d3d2b

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

libs/SalesforceSDKCore/SalesforceSDKCore/Classes/Login/SFLoginViewController+QrCodeLogin.swift

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,25 @@ public extension SalesforceLoginViewController {
5151
class func loginWithFrontdoorBridgeUrl(
5252
_ frontdoorBridgeUrlString: String,
5353
pkceCodeVerifier: String?
54-
) {
54+
) throws {
5555
guard let frontdoorBridgeUrl = URL(string: frontdoorBridgeUrlString) else { return }
5656

57+
// Only allow use of front door bridge URLs with matching consumer keys.
58+
guard let frontdoorBridgeUrlComponents = NSURLComponents(
59+
url: frontdoorBridgeUrl,
60+
resolvingAgainstBaseURL: true),
61+
let frontdoorBridgeUrlQueryItems = frontdoorBridgeUrlComponents.queryItems,
62+
let startUrlString = frontdoorBridgeUrlQueryItems.first(where: { $0.name == "startURL"})?.value,
63+
let startUrl = URL(string: startUrlString),
64+
let startUrlComponents = NSURLComponents(url: startUrl, resolvingAgainstBaseURL: true),
65+
let startUrlQueryItems = startUrlComponents.queryItems,
66+
let frontdoorBridgeUrlClientId = startUrlQueryItems.first(where: { $0.name == "client_id"})?.value,
67+
frontdoorBridgeUrlClientId == SalesforceManager.shared.bootConfig?.remoteAccessConsumerKey
68+
else {
69+
let message = "Cannot use another app's login QR Code. Please log in to this app."
70+
throw SfapError(errorCode: "-1", message: message, messageCode: nil, source: nil)
71+
}
72+
5773
// Stop current authentication attempt, if applicable, before starting the new one.
5874
UserAccountManager.shared.stopCurrentAuthentication { result in
5975

@@ -84,12 +100,12 @@ public extension SalesforceLoginViewController {
84100
*/
85101
class func loginWithFrontdoorBridgeUrlFromQrCode(
86102
_ qrCodeLoginUrl: String?
87-
) -> Bool {
103+
) throws -> Bool {
88104
if let uiBridgeApiParameters = uiBridgeApiParametersFromQrCodeLoginUrl(
89105
qrCodeLoginUrl
90106
) {
91107
SFSDKAppFeatureMarkers.registerAppFeature(sfSppFeatureQrCodeLogin)
92-
loginWithFrontdoorBridgeUrl(
108+
try loginWithFrontdoorBridgeUrl(
93109
uiBridgeApiParameters.frontdoorBridgeUrl,
94110
pkceCodeVerifier: uiBridgeApiParameters.pkceCodeVerifier
95111
)

0 commit comments

Comments
 (0)