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);
Eğer access_token öğesinden emin değilseniz, kopyalayıp jwt.io'ya yapıştırın ve bu talepleri görün. { "iss": –
İş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
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