2016-06-24 11 views
2

Ich arbeite in Client-Seite angularjs.Ich versuche, Google oauth2 zu implementieren. Ich bekomme accesstoken, aber ich muss id_token bekommen.Google oauth2 get id_token

Ich habe app.js, controller.js und html Teil hinzugefügt.

Ich folgte diesem Tutorial: 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> 

Antwort

0

eine OpenID Connect flo Triggern w, die eine Erweiterung von OAuth 2.0 ist, müssen Sie die "OpenID" scope in der Authentifizierungsanforderung hinzuzufügen (und urlencode den Raum dazwischen), so:

var scope="openid%20email"; 
+0

prüfen ich versuchte, aber ich bin immer so: "ya29.CjQLA2yjm5drVlAPKU_aKCEFeeMM_Ikezqw7rOe9y2PzUDUdsJSt5A5m1D_sjpOCcryMSmuj" authuser: "2", expires_in: "3600" hd: "xxx.com" prompt: "none " session_state:" bb554bedabf47c6f54aa07d0c69ba383b9ef23a6..1c93" token_type: "Bearer" – RSKMR

+0

I didn; t die bekommen id_token – RSKMR

+0

Bitte mir helfen, ich viel habe Schwierigkeiten – RSKMR

0

Um eine id_token zu erhalten, die Sie benötigen Ihre response_type param zu ändern:

var response_type="id_token"; 

als Antwort erhalten Sie eine id_token bekommen.

var response_type="token id_token"; 

Um mehr zu erfahren, read OpenId article

Auch Auth-Flow-Test verwenden Sie könnten: - Wenn Sie beide brauchen die id_token und access_token, sollten Sie "Token" zu response_type hinzufügen Google Ouath Playground

2

Sie müssen nonce verwenden. Fügen Sie es hinzu und id_token wird als Antwort sein.

Zum Beispiel:

let params = { 
    'client_id': GOOGLE_API_CLIEND_ID, 
    'redirect_uri': `${location.origin}/auth/google`, 
    'response_type': 'id_token token', 
    'scope': GOOGLE_API_SCOPES, 
    'state': 'af0ifjsldkj', 
    'nonce': 'n-0S6_WzA2Mj' 
}; 

Für implizite StrömungsNonce param erforderlich ist. Für weitere Informationen können Sie http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest

+0

Eine weitere Sache - ohne nonce Ihre id_token in Antworttyp wird nicht funktionieren und es sieht aus wie Google Sicherheit Nebeneffekt, nicht für pro spec –

Verwandte Themen