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) {