Nie rozumiem, jak działa ta biblioteka. Proszę, mógłbyś mi pomóc ?
Oto mój prosty kod:
public void TestJwtSecurityTokenHandler()
{
var stream =
"eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJJU1MiLCJzY29wZSI6Imh0dHBzOi8vbGFyaW0uZG5zY2UuZG91YW5lL2NpZWxzZXJ2aWNlL3dzIiwiYXVkIjoiaHR0cHM6Ly9kb3VhbmUuZmluYW5jZXMuZ291di5mci9vYXV0aDIvdjEiLCJpYXQiOiJcL0RhdGUoMTQ2ODM2MjU5Mzc4NClcLyJ9";
var handler = new JwtSecurityTokenHandler();
var jsonToken = handler.ReadToken(stream);
}
To jest błąd:
Ciąg musi być w kompaktowym formacie JSON, który ma postać: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature '.
Jeśli skopiujesz strumień na stronie jwt.io , działa dobrze :)
Odpowiedzi:
Znalazłem rozwiązanie, po prostu zapomniałem przesłać wynik:
Mogę otrzymać roszczenia za pomocą:
źródło
((List<Claim>)tokenS.Claims).ForEach(a => Console.WriteLine(a.Type.ToString() + " " + a.Value));
tokenJwtReponse.access_token
pochodzi?new JwtSecurityTokenHandler().ReadToken("")
zwróci plikSecurityToken
new JwtSecurityTokenHandler().ReadJwtToken("")
zwróci plikJwtSecurityToken
Jeśli zmienisz tylko metodę, której używasz, możesz uniknąć obsady w powyższej odpowiedzi
źródło
Potrzebujesz tajnego ciągu, który został użyty do wygenerowania tokena szyfrowania. Ten kod działa dla mnie:
źródło
handler.ReadToken(token) as SecurityToken
gdyout
później ponownie przypisujesz go jako parametr? Czy istnieje możliwość, żeValidateToken
zawiedzie i zachowana zostanie pierwotna wartość?Korzystając z pakietów .net core jwt, dostępne są oświadczenia:
źródło
Następnie wyodrębnij zawartość
źródło
Rozszerzając odpowiedź cooxkie i odpowiedź dpix , kiedy czytasz token jwt (taki jak access_token otrzymany z AD FS), możesz scalić oświadczenia w tokenie jwt z oświadczeniami z „context.AuthenticationTicket.Identity”, które może nie mają ten sam zestaw oświadczeń co token jwt.
Aby zilustrować, w przepływie kodu uwierzytelniającego przy użyciu OpenID Connect, po uwierzytelnieniu użytkownika, możesz obsłużyć zdarzenie SecurityTokenValidated, które zapewnia kontekst uwierzytelniania, a następnie możesz go użyć do odczytania access_token jako tokena jwt, a następnie możesz " merge ”tokeny znajdujące się w access_token ze standardową listą oświadczeń otrzymanych w ramach tożsamości użytkownika:
źródło