2016-05-27 4 views
0

Я учусь OAuth 2.0 и Open Id Connect и теперь у меня есть проблема: нет претензии, представленные в id_token:OAuth 2.0 и Open Id Connect утверждает вопрос

я создал InMemoryUser и требования к нему:

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"), 

     } 
    } 
} 

Мои прицелы:

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

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

Кроме того, я создал клиент MVC и Startup класса и в cluded профиль 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 
    } 
} 

Но когда я получаю id_token и декодировать его, нет претензий, которые я поставил, создавая свою InMemoryUser. Кроме того, нет претензий в User.Identity.Claims после печати их Debug:

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); 
    } 
} 

Пожалуйста, помогите мне найти причину и добавить претензий в id_token. Благодаря

ответ

0

И наконец, я нашел решение проблемы.

Проблема была в IdentityServer3 Варианты упаковки NuGet. В учебнике использовался пакет IdentityServer3 2.0.1, но я установил пакет IdentityServer3 2.5.0.

Я изменил код, когда я получаю Области применения:

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 
     } 
    }; 
} 

Я поставил IncludeAllClaimsForUser = true и теперь все претензии присутствуют в знак идентичности (id_token), и я могу получить все претензии в мой клиент MVC с помощью этого код (такой же, как предыдущий):

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); 
    } 
} 

Когда я попытался использовать старый пакет код в моем вопросе работал, как и ожидалось (без каких-либо изменений).

Похоже, что значение по умолчанию этого свойства было изменено на false в некоторой более новой версии IdentityServer3.

Спасибо всем.

1

Каждой вещи Sames хорошо для меня, но несколько раз претензия не правильно отображающих в связи с разностным между требованиями в identityserver и aspNetIdentity

попытаться очистить отображение по умолчанию претензий в вашем MVC приложение Startup.cs:

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

Это не помогло. Никаких претензий в токенах идентичности –

 Смежные вопросы

  • Нет связанных вопросов^_^