Skip to content

Commit 0e51c1c

Browse files
authored
Block webviews from allowing multiple parallel authorization_grant flows (#4918)
1 parent 77841ef commit 0e51c1c

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/LoginUtils.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,35 @@ import software.amazon.awssdk.services.ssooidc.model.SsoOidcException
1818
import software.amazon.awssdk.services.sts.StsClient
1919
import software.aws.toolkits.core.credentials.validatedSsoIdentifierFromUrl
2020
import software.aws.toolkits.core.region.AwsRegion
21+
import software.aws.toolkits.core.utils.debug
22+
import software.aws.toolkits.core.utils.getLogger
23+
import software.aws.toolkits.core.utils.warn
2124
import software.aws.toolkits.jetbrains.core.AwsClientManager
2225
import software.aws.toolkits.jetbrains.core.credentials.profiles.SsoSessionConstants
2326
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_REGION
2427
import software.aws.toolkits.jetbrains.core.credentials.sono.SONO_URL
2528
import software.aws.toolkits.jetbrains.core.credentials.sono.isSono
2629
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.InteractiveBearerTokenProvider
30+
import software.aws.toolkits.jetbrains.core.credentials.sso.pkce.ToolkitOAuthService
2731
import software.aws.toolkits.jetbrains.utils.runUnderProgressIfNeeded
2832
import software.aws.toolkits.resources.AwsCoreBundle
2933
import software.aws.toolkits.telemetry.CredentialSourceId
3034
import java.io.IOException
3135

36+
private val LOG = getLogger<Login<*>>()
37+
3238
sealed class Login<T> {
3339
abstract val id: CredentialSourceId
3440
abstract val onError: (Exception) -> Unit
3541
protected abstract fun doLogin(project: Project): T
3642

3743
fun login(project: Project): T {
44+
LOG.debug { "Starting login with request: $this" }
3845
try {
46+
check(!ToolkitOAuthService.getInstance().hasPendingRequest()) {
47+
LOG.warn { "$this attempt initiated with pending request: ${ToolkitOAuthService.getInstance().pendingRequest()}" }
48+
AwsCoreBundle.message("toolkit.login.singleton")
49+
}
3950
return doLogin(project)
4051
} catch (e: Exception) {
4152
onError(e)

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/credentials/sso/pkce/ToolkitOAuthService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const val PKCE_CLIENT_NAME = "AWS IDE Plugins for JetBrains"
4343
class ToolkitOAuthService : OAuthServiceBase<AccessToken>() {
4444
override val name: String = "aws/toolkit"
4545

46+
internal fun pendingRequest() = (currentRequest.get()?.request as? ToolkitOAuthRequest)?.registration
47+
4648
fun hasPendingRequest() = currentRequest.get() != null
4749

4850
fun authorize(registration: PKCEClientRegistration): CompletableFuture<AccessToken> {

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,7 @@ toolkit.login.dialog.sso.text_field.region=Region:
19561956
toolkit.login.dialog.sso.text_field.start_url=Start URL:
19571957
toolkit.login.dialog.sso.title=Connect using AWS IAM Identity Center
19581958
toolkit.login.dialog.title=AWS Toolkit: Add Connection
1959+
toolkit.login.singleton=Only one browser authorization flow may be active at once
19591960
toolkit.sso_expire.dialog.cancel_button=Cancel
19601961
toolkit.sso_expire.dialog.no_button=Don't show again
19611962
toolkit.sso_expire.dialog.title=Connection Expired

0 commit comments

Comments
 (0)