2014-06-06 7 views
20

Ich habe meine benutzerdefinierte OAuthAuthorizationServerProvider erfolgreich implementiert. Aber wenn ich mich anmelde und ein Token abruft, hat mein Client keine Ahnung von den Rollen, Ansprüchen usw. des Benutzers.AspNet Identity 2: Anpassen der OAuth-Endpunktantwort

Ich habe derzeit einen Webapi-Controller hinzugefügt, um die Liste der Forderungen des Auftraggebers zurückzugeben, aber ich bin nicht wirklich glücklich damit.

Wenn ein Token, die aktuelle Antwort wie folgt aussieht:

{ 
    access_token: "qefelgrebjhzefilrgo4583535", 
    token_type: "bearer", 
    expires_in: 59 
} 

Q> Wie kann es so etwas wie der folgenden Ausschnitt zurückkehren machen?

{ 
    access_token: "qefelgrebjhzefilrgo4583535", 
    token_type: "bearer", 
    expires_in: 59, 
    user: { 
     name: 'foo', 
     role: 'bar' 
    } 
} 

Meine bisherigen Fortschritte:

Die Dokumentation von OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) sagt:

Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional response parameters to the Token endpoint's json response body.

Ich konnte kein Beispiel finden, wie die Antwort anpassen, und asp-net Der Quellcode von Identity ist noch nicht veröffentlicht, also stehe ich ziemlich fest.

Antwort

30

Vielleicht suchen Sie nach TokenEndpoint Methode Override von OAuthAuthorizationServerProvider.

public override Task TokenEndpoint(OAuthTokenEndpointContext context) 
{ 
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary) 
    { 
     context.AdditionalResponseParameters.Add(property.Key, property.Value); 
    } 

    return Task.FromResult<object>(null); 
} 
+0

Danke, das ist genau das, was ich suchte. Ich habe die Methode gefunden, wusste aber nicht, wie ich die Eigenschaften zur Antwort hinzufügen kann. Ich werde das versuchen und die Antworten akzeptieren, die den Job erledigen – dgn

+1

Ihr Code funktioniert gut, aber wenn ich versuche, Objekte anstelle von Top-Level-Werten zurückzugeben, bekomme ich einen Fehler 500. IIRC die Spezifikation (für OAuth2 oder etwas) sagt das der Token und die Sachen müssen auf höchster Ebene sein, also denke ich, deshalb. Trotzdem hoffte ich, dass es mehr Freiheit für benutzerdefinierte Werte geben würde. Wie auch immer, das ist die Antwort auf meine Frage, Danke! – dgn

+2

@scenario // Überprüfen Sie die CreateProperties-Methode in der Datei ApplicationOauthProvider.cs und die damit verbundene Verwendung. – Youngjae

0

Ich glaube, Sie brauchen TokenEndpointResponse auf OAuthAuthorizationServerProvider Klasse außer Kraft zu setzen:

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context) 
    { 
     context.AdditionalResponseParameters.Add("Key","Value"); 
     return base.TokenEndpointResponse(context); 
    } 
Verwandte Themen