рдмреЗрдирд╛рдореА рдкрд╣рдЪрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ IdentityServer4 рдореЗрдВ рдЕрдирд╛рдо jwt рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ ASP.NET рдХреЛрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ OpenId Connect рдФрд░ OAuth 2.0 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдмрддрд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реИрдмрд░ рдкрд░ рдкреВрд░реНрдг рд▓реЗрдЦ рд╣реИрдВред рдЪрд▓рд┐рдП рдмрд╛рдд рдкрд░ рдЖрддреЗ рд╣реИрдВред


рд╣рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдПрдкреАрдЖрдИ рд╕рдВрд╕рд╛рдзрди рдкрд░ рдПрдХ рдЧреБрдордирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрдпрд╛ рдХреЛ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреА-рд╢рд░реНрдЯ рдкрд╕рдВрдж рд╣реИ, рд╡рд╣ рдЗрд╕реЗ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХреА рдЯреЛрдХрд░реА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╡рддрдГ, рдПрдХ рдЕрддрд┐рдерд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╡рд╕реАрд▓реА рдерд╛, рдЕрдирд╛рдо рдЯреЛрдХрди рдореЗрдВ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╡рд╛рд╕рд┐рд▓реА рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдЯреЛрдХрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЕрдирд╛рдо рдкрд╣реБрдБрдЪ рдЯреЛрдХрди рдореЗрдВ рдХреЛрдИ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдерди (рдпрд╛ рджрд╛рд╡реЗ) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдЙрдкрдХрд░рдг


  • OpenId рдХрдиреЗрдХреНрдЯ рдФрд░ OAuth 2.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IdentityServer4
  • рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореЗрдВ рдЕрдирд╛рдо рдЯреЛрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдордирд╛рдореА

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


IdentityServer4 рдХреЗ GitHub рдкрд░ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред


рдЕрдирд╛рдо рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:


  • IdneitityServer4 рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмреЗрдирд╛рдореА рдкрд╣рдЪрд╛рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
    Install-Package AnonymousIdentity 
  • Startup.cs рдореЗрдВ рдмреЗрдирд╛рдореА рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ
     services.AddIdentityServer() //   .AddAnonymousAuthentication(); 

рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдкрд░рд┐рджреГрд╢реНрдп


рдЗрдВрдкреНрд▓рд╛рдВрдЯ рдлрд╝реНрд▓реЛ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рдо рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред


рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд╡рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз


рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдкреНрд▓рд╛рдВрдЯ рдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред


 GET /connect/authorize? client_id=client1& scope=openid email api1& response_type=id_token token& redirect_uri=https://myapp/callback& state=abc& nonce=xyz& acr_values=0& response_mode=json 

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП, response_type = рдХреЛрдб (PKCE рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдЕрдиреБрд░реЛрдзред


рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдФрд░ рдЕрдирд╛рдо рдЕрдиреБрд░реЛрдз рдХреЗ рдмреАрдЪ рдЕрдВрддрд░:


  • Acr_values тАЛтАЛ= 0 рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдирд╛рдо рд▓реЙрдЧрд┐рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ ред рдпрджрд┐ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдЖрдк OpenId рдХрдиреЗрдХреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛_рдореЛрдб = json рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ Json рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдирд╛рдо рдпрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдЯреЛрдХрди рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдкреНрд░рдмрд▓ рдкреНрд░рд╡рд╛рд╣


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрд┐рдВрджреБ рдЬреЛрдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред


 { "id_token": <id_token>, "access_token": <access_token>, "token_type": "Bearer", "expires_in": "2592000", "scope": "openid email api1", "state": "abc", "session_state": <optional> } 

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдкреНрд░рд╡рд╛рд╣


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрд┐рдВрджреБ рдЬреЛрдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред


 { "code": <authorization_code>, "scope": "openid email api1", "state": "abc", "session_state": <optional> } 

рдлрд┐рд░, рдЖрдкрдХреЛ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рд╣рдо рдЯреЛрдХрди рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред


 POST /connect/token client_id=client2& client_secret=secret& grant_type=authorization_code& code=`& redirect_uri=https://myapp/callback 

рдирддреАрдЬрддрди, рдЯреЛрдХрди рдПрдВрдбрдкреЙрдЗрдВрдЯ Json рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЯреЛрдХрди рддрдХ рдкрд╣реБрдВрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИред


 { "id_token": <id_token>, "access_token": <access_token>, "token_type": "Bearer", "expires_in": "2592000", "scope": "openid email api1" } 

рдЕрдирд╛рдо рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдЯреЛрдХрди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛


рдпрджрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред


 { "nbf": 1566849147, "exp": 1569441147, "iss": "https://server", "aud": [ "https://server/resources", "api" ], "client_id": "client1", "sub": "abda9006-5991-4c90-a88c-c96764027347", "auth_time": 1566849147, "idp": "local", "ssid": "9e6453dbaf5ffdb03f08812f759d3cdf", "scope": [ "openid", "email", "api1" ], "amr": [ "anon" ] } 

рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ (amr) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдирд╛рдо рд╣реИред
"рд╕рд╛рдорд╛рдиреНрдп" рд╕рддреНрд░ (ssid) рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╡рд┐рд╖рдп (рдЙрдк) рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдмрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рдкрд░ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЯреЛрдХрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдгрд┐рдд рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред


 { "nbf": 1566850295, "exp": 1566853895, "iss": "https://server", "aud": [ "https://server/resources", "api" ], "client_id": "client1", "sub": "bob", "auth_time": 1566850295, "idp": "local", "aid": "abda9006-5991-4c90-a88c-c96764027347", "ssid": "9e6453dbaf5ffdb03f08812f759d3cdf", "scope": [ "openid", "email", "api1" ], "amr": [ "pwd" ] } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рд╕рд╣рд╛рдпрддрд╛) ssid рдХреА рддрд░рд╣ рдЕрдирд╛рдо рдЯреЛрдХрди рдХреЗ рдЙрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдЕрдирд╛рдо рд▓реЙрдЧрд┐рди рдЖрд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдЯреЛрдХрди рдореЗрдВ рдХреЗрд╡рд▓ ssid рд╣реЛрдЧрд╛ред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ AnonymousIdentity рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде IdentityServer4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрдирд╛рдо / рдкреНрд░рдорд╛рдгрд┐рдд рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдЬрд╛рдВрдЪ рдХреАред


рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/hi466467/


All Articles