2014-06-06 26 views
20

Özel OAuthAuthorizationServerProvider ürünüm başarıyla uygulandı. Ancak, giriş yapıp bir jetonu aldığımda, istemcinin kullanıcının rolleri, iddiaları vb. Hakkında hiçbir fikri yok.AspNet Kimlik 2: OAuth uç nokta yanıtını özelleştirme

Şu anda müdürün iddialarının listesini döndürmek için bir webapi denetleyicisi ekledim, ancak bununla gerçekten mutlu değil. Nasıl aşağıdaki kod parçasında gibi bir şey dönmesi yapabilir>

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

Q: bir jetonu isterken

, cari tepki benziyor? Bugüne kadar

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

Benim ilerleme:

OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) dokümantasyonu diyor ki:

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.

Ben tepkisini nasıl özelleştirileceğini herhangi bir örnek bulamadık ve asp-net Kimliğin kaynak kodu henüz yayınlanmadı, bu yüzden tamamen sıkışmış durumdayım.

cevap

30

TokenEndpoint yöntemini OAuthAuthorizationServerProvider geçersiz kılma yöntemini arıyorsanız olabilir. İnanıyorum

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

Teşekkür, bu benim aradığım de tam öyle. Yöntemi buldum ama özellikleri yanıtın nasıl ekleneceğini bilmiyordum. Bunu deneyeceğim ve işin cevabını kabul ediyorum – dgn

+1

Kodunuz iyi çalışıyor, ancak üst düzey değerler yerine nesneleri döndürmeye çalıştığımda 500 hatası alıyorum. IIRC spec (OAuth2 veya bir şey için) diyor ki Simge ve malzeme üst düzey değerler olmalı, bu yüzden sanırım bu yüzden. Yine de özel değerler için daha fazla özgürlük olduğunu umuyorum. Her neyse, sorumun cevabı bu, Teşekkürler! – dgn

+2

@scenario // ApplicationOauthProvider.cs dosyasında ve ilgili kullanımında 'CreateProperties' yöntemini gözden geçirin. – Youngjae

0

Eğer OAuthAuthorizationServerProvider sınıfına TokenEndpointResponse geçersiz kılmak gerekir:

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