diff --git a/dev-helpers/oauth2-redirect.html b/dev-helpers/oauth2-redirect.html
index 4de40532..00c7f014 100644
--- a/dev-helpers/oauth2-redirect.html
+++ b/dev-helpers/oauth2-redirect.html
@@ -8,6 +8,7 @@
function run () {
var oauth2 = window.opener.swaggerUIRedirectOauth2;
var sentState = oauth2.state;
+ var redirectUrl = oauth2.redirectUrl;
var isValid, qp, arr;
qp = (window.location.hash || location.search).substring(1);
@@ -35,7 +36,7 @@
if (qp.code) {
delete oauth2.state;
oauth2.auth.code = qp.code;
- oauth2.callback(oauth2.auth);
+ oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
} else {
oauth2.errCb({
authId: oauth2.auth.name,
@@ -45,9 +46,8 @@
});
}
} else {
- oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid});
+ oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
}
window.close();
}
-
diff --git a/src/core/oauth2-authorize.js b/src/core/oauth2-authorize.js
index 3e7580ac..5d654318 100644
--- a/src/core/oauth2-authorize.js
+++ b/src/core/oauth2-authorize.js
@@ -71,6 +71,7 @@ export default function authorize ( { auth, authActions, errActions, configs, au
win.swaggerUIRedirectOauth2 = {
auth: auth,
state: state,
+ redirectUrl: redirectUrl,
callback: flow === "implicit" ? authActions.preAuthorizeImplicit : authActions.authorizeAccessCode,
errCb: errActions.newAuthErr
}
diff --git a/src/core/plugins/auth/actions.js b/src/core/plugins/auth/actions.js
index a7dee602..a56a8310 100644
--- a/src/core/plugins/auth/actions.js
+++ b/src/core/plugins/auth/actions.js
@@ -82,9 +82,14 @@ export const authorizePassword = ( auth ) => ( { authActions } ) => {
headers.Authorization = "Basic " + btoa(username + ":" + password)
} else {
Object.assign(form, {username}, {password})
+
if ( passwordType === "query") {
- if ( clientId ) { query.client_id = clientId }
- if ( clientSecret ) { query.client_secret = clientSecret }
+ if ( clientId ) {
+ query.client_id = clientId
+ }
+ if ( clientSecret ) {
+ query.client_secret = clientSecret
+ }
} else {
Object.assign(form, {client_id: clientId}, {client_secret: clientSecret})
}
@@ -105,17 +110,17 @@ export const authorizeApplication = ( auth ) => ( { authActions } ) => {
return authActions.authorizeRequest({body: buildFormData(form), name, url: schema.get("tokenUrl"), auth })
}
-export const authorizeAccessCode = ( auth ) => ( { authActions } ) => {
- let { schema, name, clientId, clientSecret } = auth
- let form = {
- grant_type: "authorization_code",
- code: auth.code,
- client_id: clientId,
- client_secret: clientSecret
- }
-
- return authActions.authorizeRequest({body: buildFormData(form), name, url: schema.get("tokenUrl"), auth})
+export const authorizeAccessCode = ( { auth, redirectUrl } ) => ( { authActions } ) => {
+ let { schema, name, clientId, clientSecret } = auth
+ let form = {
+ grant_type: "authorization_code",
+ code: auth.code,
+ client_id: clientId,
+ client_secret: clientSecret,
+ redirect_uri: redirectUrl
+ }
+ return authActions.authorizeRequest({body: buildFormData(form), name, url: schema.get("tokenUrl"), auth})
}
export const authorizeRequest = ( data ) => ( { fn, authActions, errActions, authSelectors } ) => {
@@ -140,41 +145,42 @@ export const authorizeRequest = ( data ) => ( { fn, authActions, errActions, aut
query: query,
body: body
})
- .then(function (response) {
- let token = JSON.parse(response.data)
- let error = token && ( token.error || "" )
- let parseError = token && ( token.parseError || "" )
+ .then(function (response) {
+ let token = JSON.parse(response.data)
+ let error = token && ( token.error || "" )
+ let parseError = token && ( token.parseError || "" )
- if ( !response.ok ) {
- errActions.newAuthErr( {
- authId: name,
- level: "error",
- source: "auth",
- message: response.statusText
- } )
- return
- }
-
- if ( error || parseError ) {
- errActions.newAuthErr({
- authId: name,
- level: "error",
- source: "auth",
- message: JSON.stringify(token)
- })
- return
- }
-
- authActions.authorizeOauth2({ auth, token})
- })
- .catch(e => {
- let err = new Error(e)
+ if ( !response.ok ) {
errActions.newAuthErr( {
authId: name,
level: "error",
source: "auth",
- message: err.message
- } ) })
+ message: response.statusText
+ } )
+ return
+ }
+
+ if ( error || parseError ) {
+ errActions.newAuthErr({
+ authId: name,
+ level: "error",
+ source: "auth",
+ message: JSON.stringify(token)
+ })
+ return
+ }
+
+ authActions.authorizeOauth2({ auth, token})
+ })
+ .catch(e => {
+ let err = new Error(e)
+ errActions.newAuthErr( {
+ authId: name,
+ level: "error",
+ source: "auth",
+ message: err.message
+ } )
+ })
}
export function configureAuth(payload) {