我在客户端angularjs.I工作我试图实现谷歌oauth2。我得到了accessstoken但我需要得到id_token。
我添加了app.js,controller.js和html part。
我遵循了本教程: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>
答案 0 :(得分:2)
您需要使用 nonce 。添加它, id_token 将作为回应。
例如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef SplittedString char[BUFSIZ]
int main()
{
FILE *infile;
char token_seperator[]={"\n"};
SplittedString data;
SplittedString myLines[50]; // you can modify this number to hold more lines
int i=0;
infile=fopen("example","r");
while((fgets(data,BUFSIZ,infile)!=NULL) && i < 50){ //prevent array overflow
printf("%s\n",data);
strcpy(myLines[i], data);
++i;
}
}
对于隐式流程 nonce param是必需的。有关详细信息,请查看http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest
答案 1 :(得分:0)
要触发OpenID Connect流,这是OAuth 2.0的扩展,您需要添加&#34; openid&#34;身份验证请求中的范围(以及urlencode中间的空格),所以:
var scope="openid%20email";
答案 2 :(得分:0)
要接收 id_token ,您需要将 response_type 参数更改为:
var response_type="id_token";
作为回复,您将获得 id_token 。如果您同时需要 id_token 和 access_token ,则应添加&#34; 令牌&#34;到 response_type :
var response_type="token id_token";
要了解详情,read OpenId article
您也可以使用Google Ouath Playground
测试身份验证流程