我在客户端angularjs工作。我正在尝试实现谷歌的oauth2。我正在获得访问权限,但我需要得到id_token。
我添加了app.js、controller.js和html部分。
我按照这个教程:http://anandsekar.github.io/oauth2-with-angularjs/
app.js:
angular
.module('angularoauthexampleApp', [ ])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/access_token=:accessToken', {
template: '',
controller: function ($location,$rootScope) {
var hash = $location.path().substr(1);
var splitted = hash.split('&');
var params = {};
for (var i = 0; i < splitted.length; i++) {
var param = splitted[i].split('=');
var key = param[0];
var value = param[1];
params[key] = value;
$rootScope.accesstoken=params;
}
$location.path("/about");
}
})
.otherwise({
redirectTo: '/'
});
});
controller.js
angular.module('angularoauthexampleApp')
.controller('MainCtrl', function ($scope) {
$scope.login=function() {
var client_id="your client_id";
var scope="email";
var redirect_uri="http://localhost:9000";
var response_type="token";
var url="https://accounts.google.com/o/oauth2/auth?scope="+scope+"&client_id="+client_id+"&redirect_uri="+redirect_uri+
"&response_type="+response_type;
window.location.replace(url);
};
});
HTML格式:
<button class="btn btn-primary" ng-click="login()">Login</button>
3条答案
按热度按时间qlckcl4x1#
您需要使用nonce。添加它,id_token将作为响应。
例如:
对于 * 隐式流*Nonce,需要参数。有关详细信息,请查看http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest
cbeh67ev2#
要接收id_token,您需要将response_type参数更改为:
作为响应,您将获得id_token。如果您同时需要id_token和access_token,则应将“token”添加到response_type:
要了解更多信息,请访问read OpenId article
此外,您还可以使用Google Ouath Playground测试身份验证流
fae0ux8s3#
要触发OpenID Connect流(OAuth 2.0的扩展),您需要在身份验证请求中添加“openid”作用域(并对两者之间的空格进行urlencode编码),因此: