2014-06-06 13 views
20

Pomyślnie zaimplementowałem mój niestandardowy OAuthAuthorizationServerProvider. Ale po zalogowaniu i odzyskaniu tokena mój klient nie ma pojęcia o rolach użytkownika, roszczeniach itp.AspNet Identity 2: Dostosuj odpowiedź punktu końcowego OAuth

Aktualnie dodałem kontrolera webapi do zwrócenia listy roszczeń głównego zobowiązanego, ale jestem niezbyt zadowolony z tego.

przypadku żądania tokenu, obecna reakcja wygląda następująco:

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

Q> W jaki sposób można zrobić coś jak to powrót poniższym fragmencie?

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

Mój postęp tej pory:

Dokumentacja OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) mówi:

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.

nie mogłem znaleźć żadnego przykładu, w jaki sposób dostosować odpowiedzi i asp-net Kod źródłowy tożsamości nie został jeszcze wydany, więc utknąłem.

Odpowiedz

30

Być może szukasz metody nadpisania TokenEndpoint metody 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

Dzięki, to jest dokładnie to, czego szukałem. Znalazłem tę metodę, ale nie wiedziałem, jak dodać właściwości do odpowiedzi. Spróbuję tego i zaakceptuję odpowiedzi, które wykonuje zadanie. – dgn

+1

Twój kod działa dobrze, ale kiedy próbuję zwrócić obiekty zamiast wartości najwyższego poziomu, pojawia się błąd 500. IIRC specyfikacja (dla OAuth2 lub coś podobnego) mówi, że token i inne rzeczy muszą być wartościami najwyższego poziomu, więc myślę, że właśnie dlatego. Wciąż miałem nadzieję, że dla wartości niestandardowych będzie więcej wolności. W każdym razie, to jest odpowiedź na moje pytanie, dzięki! – dgn

+2

@scenario // Sprawdź metodę "CreateProperties" w pliku ApplicationOauthProvider.cs i związanym z nią użyciu. – Youngjae

0

wierzę trzeba zastąpić TokenEndpointResponse na OAuthAuthorizationServerProvider klasy:

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context) 
    { 
     context.AdditionalResponseParameters.Add("Key","Value"); 
     return base.TokenEndpointResponse(context); 
    } 
Powiązane problemy