7

Kısa: İstemcim IdentityServer örnek sunucusundan bir erişim belirteci alır ve daha sonra WebApi'ye iletir. Denetleyicimde, bu.HttpContext.User.GetUserId() öğesi null döndürür (Kullanıcı diğer iddiaları olsa da). Erişim belirtecinin adında bir hak iddiası bulunmadığından şüpheleniyorum. IdentityServer'ı nasıl ekleyebilirim?IdentityServer, kullanıcı kimliğini erişim jetonuna nasıl eklenir?

şimdiye kadar çalıştık Ne:

  • örtülü akış (rastgele girişimi) bir

    İstem = {yeni ScopeClaim ekledik IdSvrHost kapsamı tanımı

  • (üzere hibrid anahtarlamalı ClaimTypes.NameIdentifier, alwaysInclude: true)} Ben ekledik IdSvrHost istemci tanımında

  • İstem = {yeni talep (ClaimTypes.NameIdentifier, "42")}

(aynı zamanda rastgele bir girişimi)

Ayrıca kapsam tanımı diğer kapsam denedik ve bunların ikisinin de ortaya . Görünüşe göre, bu isim kimliği genellikle kimlik belirtecine dahil edilir, ancak farkında olduğum çoğu genel API için, sunucuya kimlik belirteci sağlamazsınız.

Daha fazla bilgi: IdSrvHost ve Api farklı ana bilgisayarlarda bulunmaktadır. Denetleyici'de [Authorize] var. Aslında, diğer iddiaları görebiliyorum.

request.CreateAuthorizeUrl(
      clientId: "borrow_node", 
      responseType: "token", 
      scope: "borrow.slave", 
      redirectUri: "borrow_node:redirect-target", 
      state: state, 
      nonce: nonce); 

ve ben de

çalıştı:

public static Scope Slave { get; } = new Scope { 
    Name = "borrow.slave", 
    DisplayName = "List assigned tasks", 
    Type = ScopeType.Resource, 

    Claims = { 
     new ScopeClaim(ClaimTypes.NameIdentifier, alwaysInclude: true), 
    }, 
}; 

Ve istemci:

new Client { 
    ClientId = "borrow_node", 
    ClientName = "Borrow Node", 

    Flow = Flows.Implicit, 

    RedirectUris = new List<string> 
    { 
     "borrow_node:redirect-target", 
    }, 

    Claims = { new Claim(ClaimTypes.NameIdentifier, "42") }, 

    AllowedScopes = { 
     StandardScopes.OpenId.Name, 
     //StandardScopes.OfflineAccess.Name, 
     BorrowScopes.Slave.Name, 
    }, 
} 

Auth URI Api

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 

app.UseIdentityServerAuthentication(options => { 
    options.Authority = "http://localhost:22530/"; 

    // TODO: how to use multiple optional scopes? 
    options.ScopeName = "borrow.slave"; 
    options.AdditionalScopes = new[] { "borrow.receiver", "borrow.manager" }; 

    options.AutomaticAuthenticate = true; 
    options.AutomaticChallenge = true; 
}); 

Kapsam ile yapılandırılmış

request.CreateAuthorizeUrl(
      clientId: "borrow_node", 
      responseType: "id_token token", 
      scope: "openid borrow.slave", 
      redirectUri: "borrow_node:redirect-target", 
      state: state, 
      nonce: nonce); 
+0

Eğer access_token öğesinden emin değilseniz, kopyalayıp jwt.io'ya yapıştırın ve bu talepleri görün. { "iss": –

+0

İşte access_token olsun ne "http: // localhost: 22530", "aud": "http: // localhost: 22530/kaynaklar", "exp": 1460323801, "nbf": 1460320201, "client_id": "borrow_node", "kapsam": "borrow.slave", "alt": "88421113", "auth_time": 1460320200, "IDP": "idsvr" } - adsızlık iddiasında bulunma – LOST

+0

BTW, adidasyonun "42" olmasını istemiyorum, bu yalnızca herhangi bir şeyi değiştirip değiştirmediğini görmek için yapılan bir girişimdi. – LOST

cevap

4

Yaşasın, ben bu sayfayı sendeledi zaman, bir cevap buldum: https://github.com/IdentityServer/IdentityServer3.Samples/issues/173 Görünüşe göre, kullanıcı kimlik erişim belirteci "alt" istem geçirilen

. Ben körü körüne API örnek kopyalanan Çünkü yapılandırma esas nameidentifier eşleme "alt" istem benim API engelledi

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 

dahil. Bu satırı kaldırdıktan sonra, kimliği doğrulanmış denetleyicinin HttpContext.User.GetUserId() kullanıcı kimliğini doğru olarak döndürür.

İlgili konular