feat: add PKCE support for OAuth2 Authorization Code flows (#5361)

* Add PKCE support.

* Fix tests

* Update oauth2.md

* Rename usePkce

* Fix the BrokenComponent error

* Update oauth2.md

* Remove isCode variable. Remove uuid4 dependency.

* Remove utils functions

* Import crypto

* Fix tests

* Fix the tests

* Cleanup

* Fix code_challenge generation

* Move code challenge and verifier to utils for mocks. Update tests.

* Mock the PKCE methods in the utils file properly.

* Add missing expect

* use target-method spies

* Add comments to explain test values.

* Get rid of jsrsasign.
This commit is contained in:
poveilleux
2019-10-07 20:24:43 -04:00
committed by kyle
parent 8cabcffddf
commit 139592e353
12 changed files with 3542 additions and 7681 deletions

View File

@@ -1,5 +1,5 @@
import win from "core/window"
import { btoa, sanitizeUrl } from "core/utils"
import { btoa, sanitizeUrl, generateCodeVerifier, createCodeChallenge } from "core/utils"
export default function authorize ( { auth, authActions, errActions, configs, authConfigs={} } ) {
let { schema, scopes, name, clientId } = auth
@@ -66,6 +66,18 @@ export default function authorize ( { auth, authActions, errActions, configs, au
query.push("realm=" + encodeURIComponent(authConfigs.realm))
}
if (flow === "authorizationCode" && authConfigs.usePkceWithAuthorizationCodeGrant) {
const codeVerifier = generateCodeVerifier()
const codeChallenge = createCodeChallenge(codeVerifier)
query.push("code_challenge=" + codeChallenge)
query.push("code_challenge_method=S256")
// storing the Code Verifier so it can be sent to the token endpoint
// when exchanging the Authorization Code for an Access Token
auth.codeVerifier = codeVerifier
}
let { additionalQueryStringParams } = authConfigs
for (let key in additionalQueryStringParams) {