2016-04-25 7 views
0

Mit dem Standardendpunkt für FOSOAuthServerBundle (mit FOSUserBundle) kann ich ein Zugriffs- und Aktualisierungstoken abrufen, indem ich die Kombination client_id, client_secret, user und password zur Verfügung stelle. Die Antwort sieht wie folgt aus:Symfony FOSOAuthServerBundle Token programmgesteuert abrufen?

{ 
    "accessToken": "YTg2ZTJkNTY2MGM5MGQyNzZjYjkyZWMwYzg1YTZmZTZmOTIyMzAxNDY2MTkwZDU5ODYzZTAzYmIyNDI0YTQ4ZQ", 
    "expiresIn": 3600, 
    "tokenType": "bearer", 
    "refreshToken": "OTU1MGZhNDQ2ODFkZDUzMmQ4Y2FhNTk5OWM0NWFlNDk0YTY0ZDZhOTRjZTUwM2JlYTE3MDkxYzU3ZWY1OGRkYQ" 
} 

Meine Frage ist, wie kann ich, indem in den Client- und Benutzerdaten ähnliche Daten programmatisch abrufen? I.e. Wie kann ich aus einem anderen Teil meiner Anwendung den gleichen Anruf machen, ohne über HTTP (langsam) zu gehen, sondern direkt über den Bundle-Code (schnell)?

Ich bin sicher, es muss eine einfache Möglichkeit, dies zu tun, aber das Beste, was ich bis jetzt finden kann, ist diese https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/347, die nicht wirklich das gleiche wie der HTTP-Aufruf erreichen.

Antwort

3

Hier ist, wie Sie die gleiche Antwort erhalten können direkt aus dem fos_oauth_server.server Service ein Request-Objekt verwenden:

$grantRequest = new Request(array(
     'client_id' => $clientId, 
     'client_secret' => $clientSecret, 
     'grant_type' => 'password', 
     'username' => $username, 
     'password' => $password 
    )); 

$tokenResponse = $this->get('fos_oauth_server.server')->grantAccessToken($grantRequest); 

$token = $tokenResponse->getContent(); 
0

Mein Verständnis ist, dass Sie Passwort Grant-Typ verwenden. Dazu müsste Ihre Anwendung ein Benutzer- und ein Kennwortpaar kennen, um ein Token zu erhalten. Ich würde stattdessen empfehlen, client_credentials Grant-Typ zu verwenden.

die FOSOAuthServerBundle Verwenden Sie sollten einen Zugriffstoken bekommen mit so etwas wie (in einem ContainerAware Kontext)

$this->get('fos_oauth_server.server')->grantAccessToken($request) 

Hier können, wie Sie ein Request-Objekt ist erforderlich, zu sehen, aber Sie können dieses Objekt leicht fälschen

In Alternative könnten Sie

$this->get('fos_oauth_server.server')->createAccessToken($client, null) 

versuchen Wo $ client ist eine Instanz Sie OAuth-Client.