2016-05-27 15 views
0

Ich lerne OAuth 2.0 und Open Id Connect und jetzt habe ich ein Problem: Es gibt nicht in id_token präsentiert Ansprüche:OAuth 2.0 und OpenID Connect behauptet Ausgabe

Ich habe InMemoryUser und Ansprüche für ihn geschaffen:

return new List<InMemoryUser>() 
{ 
    new InMemoryUser() 
    { 
     Username = "SomeName", 
     Password = "SomePassword", 
     Subject = "b05d3546-6ca8-4d32-b95c-77e94d705ddf", 
     Claims = new Claim[] 
     { 
      new Claim(IdentityServer3.Core.Constants.ClaimTypes.GivenName, "MyGivenName"), 
      new Claim(IdentityServer3.Core.Constants.ClaimTypes.FamilyName, "MyFamilyName"), 

     } 
    } 
} 

Meine Bereiche:

return new List<Scope>() 
{ 
    StandardScopes.OpenId, 
    StandardScopes.Profile, 

    new Scope() 
    { 
     Name = "somename", 
     DisplayName = "some display name", 
     Description = "some description", 
     Type = ScopeType.Resource 
    } 
}; 

Außerdem habe ich MVC erstellt-Client und Startup Klasse und in ausgeschlossen Profil scope:

public void Configuration(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     AuthenticationType = "Cookies" 
    }); 

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions() 
    { 
     ClientId = "TripsHybrid", 
     Authority = Constants.Constants.TripsSts, 
     RedirectUri = Constants.Constants.TripsMvc, 
     SignInAsAuthenticationType = "Cookies", 
     ResponseType = "code id_token token", 
     Scope = "openid profile", // "profile" scope inсluded 
    } 
} 

Aber wenn ich id_token erhalten und dekodieren, gibt es keine Ansprüche, das ich habe, während meine InMemoryUser zu schaffen. Auch gibt es keine Ansprüche in User.Identity.Claims nach ihnen Debug Druck:

if (this.User.Identity.IsAuthenticated) 
{ 
    Debug.WriteLine("Claims:"); 
    var identity = this.User.Identity as ClaimsIdentity; 
    foreach (var claim in identity.Claims) 
    { 
     Debug.WriteLine(claim.Type + " - " + claim.Value); 
    } 
} 

Bitte, helfen Sie mir den Grund zu finden und fügen Ansprüche in id_token. Dank

Antwort

0

Schließlich habe ich die Problemlösung gefunden.

Das Problem war in IdentityServer3 NuGet Paketversionen. Im Tutorial wurde das Paket IdentityServer3 2.0.1 verwendet, aber ich habe das Paket IdentityServer3 2.5.0 installiert.

Ich habe meinen Code geändert, wenn ich Bereiche erhalten:

public static IEnumerable<Scope> Get() 
{ 
    Scope profileScope = StandardScopes.Profile; 
    profileScope.IncludeAllClaimsForUser = true; // set this property to true 

    return new List<Scope>() 
    { 
     StandardScopes.OpenId, 
     profileScope, 

     new Scope() 
     { 
      Name = "somename", 
      DisplayName = "some display name", 
      Description = "some description", 
      Type = ScopeType.Resource 
     } 
    }; 
} 

ich die IncludeAllClaimsForUser = true gesetzt haben und jetzt alle Forderungen in Identitäts-Token vorhanden sind (id_token) und ich kann alle Forderungen in meinem MVC-Client diese erhalten Code (die gleiche wie in früheren):

if (this.User.Identity.IsAuthenticated) 
{ 
    Debug.WriteLine("Claims:"); 
    var identity = this.User.Identity as ClaimsIdentity; 
    foreach (var claim in identity.Claims) 
    { 
     Debug.WriteLine(claim.Type + " - " + claim.Value); 
    } 
} 

als ich versuchte, in meiner Frage der Code das ältere Paket zu verwenden, wie erwartet gearbeitet (ohne Änderungen).

Es scheint, dass der Standardwert dieser Eigenschaft in einigen neueren Versionen von false geändert wurde .

Vielen Dank.

1

jedes Ding sames für mich in Ordnung, aber einige Male die Anspruch Abbildung nicht korrekt aufgrund der diffrence zwischen Ansprüchen in identityserver und aspNetIdentity

versuchen, den Standard Ansprüche Mapping in Ihrem MVC-app Startup.cs zu löschen:

// Clear The InboundClaimTypeMap 
     JwtSecurityTokenHandler.InboundClaimTypeMap.Clear(); 
+0

Es hat nicht geholfen. Keine Ansprüche im Identitäts-Token –