Implement OAuth2 password flow
This commit is contained in:
@@ -122,6 +122,12 @@ SwaggerUi.Views.AuthView = Backbone.View.extend({
|
|||||||
this.clientCredentialsFlow(scopes, dets.tokenUrl, container.OAuthSchemeKey);
|
this.clientCredentialsFlow(scopes, dets.tokenUrl, container.OAuthSchemeKey);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if(auth.get('type') === 'oauth2' && flow && (flow === 'password')) {
|
||||||
|
dets = auth.attributes;
|
||||||
|
window.swaggerUi.tokenName = dets.tokenName || 'access_token';
|
||||||
|
this.passwordFlow(scopes, dets.tokenUrl, dets.username, dets.password, window.OAuthSchemeKey);
|
||||||
|
return;
|
||||||
|
}
|
||||||
else if(auth.get('grantTypes')) {
|
else if(auth.get('grantTypes')) {
|
||||||
// 1.2 support
|
// 1.2 support
|
||||||
var o = auth.get('grantTypes');
|
var o = auth.get('grantTypes');
|
||||||
@@ -176,6 +182,27 @@ SwaggerUi.Views.AuthView = Backbone.View.extend({
|
|||||||
onOAuthComplete('');
|
onOAuthComplete('');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
|
passwordFlow: function (scopes, tokenUrl, username, password, OAuthSchemeKey) {
|
||||||
|
var params = {
|
||||||
|
'scope': scopes.join(' '),
|
||||||
|
'username': username,
|
||||||
|
'password': password,
|
||||||
|
'grant_type': 'password'
|
||||||
|
};
|
||||||
|
$.ajax({
|
||||||
|
url : tokenUrl,
|
||||||
|
type: 'POST',
|
||||||
|
data: params,
|
||||||
|
success: function (data)
|
||||||
|
{
|
||||||
|
onOAuthComplete(data, OAuthSchemeKey);
|
||||||
|
},
|
||||||
|
error: function ()
|
||||||
|
{
|
||||||
|
onOAuthComplete('');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
SwaggerUi.Models.Oauth2Model = Backbone.Model.extend({
|
SwaggerUi.Models.Oauth2Model = Backbone.Model.extend({
|
||||||
defaults: {
|
defaults: {
|
||||||
scopes: {}
|
scopes: {},
|
||||||
|
isPasswordFlow: false
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function () {
|
initialize: function () {
|
||||||
@@ -19,6 +20,8 @@ SwaggerUi.Models.Oauth2Model = Backbone.Model.extend({
|
|||||||
attributes.scopes = scopes;
|
attributes.scopes = scopes;
|
||||||
this.attributes = attributes;
|
this.attributes = attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.set('isPasswordFlow', attributes.flow && attributes.flow === 'password');
|
||||||
this.on('change', this.validate);
|
this.on('change', this.validate);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
SwaggerUi.Views.Oauth2View = Backbone.View.extend({
|
SwaggerUi.Views.Oauth2View = Backbone.View.extend({
|
||||||
events: {
|
events: {
|
||||||
'change .oauth-scope': 'scopeChange'
|
'change .oauth-scope': 'scopeChange',
|
||||||
|
'change .oauth-username': 'setUsername',
|
||||||
|
'change .oauth-password': 'setPassword'
|
||||||
},
|
},
|
||||||
|
|
||||||
template: Handlebars.templates.oauth2,
|
template: Handlebars.templates.oauth2,
|
||||||
@@ -18,5 +20,13 @@ SwaggerUi.Views.Oauth2View = Backbone.View.extend({
|
|||||||
var scope = $(e.target).data('scope');
|
var scope = $(e.target).data('scope');
|
||||||
|
|
||||||
this.model.setScopes(scope, val);
|
this.model.setScopes(scope, val);
|
||||||
|
},
|
||||||
|
|
||||||
|
setUsername: function (e) {
|
||||||
|
this.model.set('username', $(e.target).val());
|
||||||
|
},
|
||||||
|
|
||||||
|
setPassword: function (e) {
|
||||||
|
this.model.set('password', $(e.target).val());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -201,4 +201,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.api-popup-actions { padding-top: 10px; }
|
.api-popup-actions { padding-top: 10px; }
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3 class="auth__title">Select OAuth2.0 Scopes</h3>
|
<h3 class="auth__title">OAuth2.0</h3>
|
||||||
<p>{{{sanitize description}}}</p>
|
<p>{{{sanitize description}}}</p>
|
||||||
|
{{#if authorizationUrl}}<p>Authorization URL: {{{sanitize authorizationUrl}}}</p>{{/if}}
|
||||||
|
{{#if tokenUrl}}<p>Token URL: {{{sanitize tokenUrl}}}</p>{{/if}}
|
||||||
|
<p>flow: {{{escape flow}}}</p>
|
||||||
|
{{#if isPasswordFlow}}
|
||||||
|
<p>Please input username and password for password flow authorization</p>
|
||||||
|
<fieldset>
|
||||||
|
<div><label>Username: <input class="oauth-username" type="text" name="username"></label></div>
|
||||||
|
<div><label>Password: <input class="oauth-password" type="password" name="password"></label></div>
|
||||||
|
</fieldset>
|
||||||
|
{{/if}}
|
||||||
|
<p><strong> {{{escape appName}}} </strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>
|
||||||
<p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.
|
<p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.
|
||||||
<a href="#">Learn how to use</a>
|
<a href="#">Learn how to use</a>
|
||||||
</p>
|
</p>
|
||||||
<p><strong> {{{escape appName}}} </strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>
|
|
||||||
<p>Authorization URL: {{{sanitize authorizationUrl}}}</p>
|
|
||||||
<p>flow: {{{escape flow}}}</p>
|
|
||||||
<ul class="api-popup-scopes">
|
<ul class="api-popup-scopes">
|
||||||
{{#each scopes}}
|
{{#each scopes}}
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
Reference in New Issue
Block a user