
рдкрд░рд┐рдЪрдп
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рд╡рд┐рд╖рдп рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред рдХрдИ .NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдВрдбреЛрдЬ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдлрд╛рдЙрдВрдбреЗрд╢рди (WIF), рдЗрд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рддрдерд╛рдХрдерд┐рдд "рдкрд╣рдЪрд╛рди-рдЬрд╛рдЧрд░реВрдХ" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ WIF рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЙрдирдХреЗ рд▓рд┐рдП
MSDN рдХреЗ рдЕрдЧрд▓реЗ
рднрд╛рдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдХреЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддрдерд╛рдХрдерд┐рдд "рджрд╛рд╡реЗ-рдЖрдзрд╛рд░рд┐рдд" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
рджрд╛рд╡реЗ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг
"рджрд╛рд╡рд╛-рдЖрдзрд╛рд░рд┐рдд" рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрджрд╛рди рджреЗрдиреЗ рдпрд╛ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдордирдорд╛рдирд╛ рддрд░реНрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд "рджрд╛рд╡реЛрдВ" рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдЙрдирдХреЗ "рджрд╛рд╡реЛрдВ" рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдкрд╛рд╕ "рднреВрдорд┐рдХрд╛" рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп "рдкреНрд░рд╢рд╛рд╕рдХ" рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рддрддреНрд╡ рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рдлрд╛рдпрджреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдПрдХ рд╣реА
MSDN рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ
рдбреЛрдорд┐рдирд┐рдХ рдмрд╛рдпрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ
рд╡реНрдпрд╛рдЦреНрдпрд╛рди рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рднреА рджреЗрддрд╛ рд╣реВрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддрд░реНрдХ рд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рддреЛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрд▓рдЧ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреАред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдПрдХреНрд╕реЗрд╕ рдкреЙрд▓рд┐рд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдЪреАрд▓реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдкреАрдЖрдИ ASP.NET рд╡реЗрдм рдПрдкреАрдЖрдИ 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдХ рд╡реЗрдм рд╕рд╛рдЗрдЯ рд╣реЛрдЧрд╛ред
рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреНрд▓рд╛рдЗрдВрдЯ

- рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:
- рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВ
- рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ;
- рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓реЗрдВ;
рд╡реЗрдм рдХреНрд▓рд╛рдЗрдВрдЯ

- рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдПрдкреАрдЖрдИ рддрдХ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред
- рдореЛрдмрд╛рдЗрд▓ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:
- рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВ
- рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ;
- рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓реЗрдВ;
- рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ;
- рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдорд╛рди;
- рд╕рднреА рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ;
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдПрдВ / рд╣рдЯрд╛рдПрдВ;
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдФрд░ рдХрд┐рди рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЦреИрд░, рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдЗрдП рднрд╡рд┐рд╖реНрдп рдХреА рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
public interface IUsersApiController {
рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдХреЛрд╖реНрдардХ рд╕реЗ рдмрд╛рд╣рд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХрдо рд╕реЗ рдХрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ рдпрд╣ рдХрд░реЗрдЧрд╛:
public class UsersController : ApiController {
рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрд▓реЗрдореНрд╕рдСрдереЛрд░рд╛рдЗрдЬрд╝реЗрд╢рди рдореИрдирдЬреЗрд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реИред
ClaimsAuthorizationManager
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ WIF рдШрдЯрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рддрд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ
рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджрд╛рд╡реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ * рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред
* - рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╕реЗрдЯ рдХрд╣рд╛рдБ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрдирддрд╛ рд╣реИред
рдмрд╣реБрдд рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╣рдо
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ MSDN рд╕реЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЙрдзрд╛рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрднрд╛рдЧ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдВ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИрдВ:
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХреВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣реБрдВрдЪ рдиреАрддрд┐ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ:
... <policy resource="http://localhost:28491/Developers.aspx" action="GET"> <or> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" /> <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" /> </or> </policy> <policy resource="http://localhost:28491/Administrators.aspx" action="GET"> <and> <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" /> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" /> </and> </policy> <policy resource="http://localhost:28491/Default.aspx" action="GET"> </policy> ...
рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪ рдиреАрддрд┐ "рдиреАрддрд┐" рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ "рд╕рдВрд╕рд╛рдзрди" рдФрд░ "рдХрд╛рд░реНрд░рд╡рд╛рдИ" рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рдЦрдВрдб рдХреЗ рднреАрддрд░ "рджрд╛рд╡реЗ" рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред WebApi рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рд╕рдВрд╕рд╛рдзрди" рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдирд╛рдо рд╣реИ, "рдХрд╛рд░реНрд░рд╡рд╛рдИ" рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдореЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ *ред
* - рдкреНрд░рддреНрдпреЗрдХ рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдФрд░ рдпрд╛ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ 2 рд╕реЗ рдЕрдзрд┐рдХ рджрд╛рд╡рд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА "as-is" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд░рд┐рд╕ рдХреЗ рдирд╛рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╣рдо рдЗрд╕реЗ
XmlBasedAuthorizationManager
рдмрджрд▓
XmlBasedAuthorizationManager
ред рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
PolicyReader
рдХреНрд▓рд╛рд╕ рдХреА рдХрдореА рд╣реИ, рдЖрдк рдЗрд╕реЗ MSDN рдЙрджрд╛рд╣рд░рдг рдХреЗ
рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebAPI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
1. WIF рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
<configSections> <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> </configSections>
2. рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
<system.identityModel> <identityConfiguration> <claimsAuthorizationManager type="YourProject.WebApi.Security.XmlBasedAuthorizationManager, YourProject.WebApi, Version=1.0.0.0, Culture=neutral"> </claimsAuthorizationManager> <claimsAuthenticationManager type="YourProject.WebApi.Security.AuthenticationManager, YourProject.WebApi, Version=1.0.0.0, Culture=neutral" /> </identityConfiguration> </system.identityModel>
рдареАрдХ рд╣реИ, рд╣рдордиреЗ WIF рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рджреЛ рд╡рд┐рд╡рд░рдг рдКрдкрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдмрдиреЗ рд░рд╣реЗ:
- xml- рд╡рд░реНрдЧреЛрдВ "рдиреАрддрд┐" рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦрд╛рд▓реА рд╣реИ;
- рдПрдХ xml рддрддреНрд╡ "
claimsAuthenticationManager
" рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
1. рдкреНрд░рд╡реЗрд╢ рдиреАрддрд┐ рд╡рд┐рдиреНрдпрд╛рд╕
рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдиреАрддрд┐ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдирд┐рдпрдореЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
<policy resource="Users" action="GetAllUsers"> <and> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WebApplication" /> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="Admin" /> </and> </policy> <policy resource="Users" action="Post"> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WPhoneApplication" /> </policy> <policy resource="Users" action="RestorePassword"> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WPhoneApplication" /> </policy> <policy resource="Users" action="GetUserById"> <or> <and> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WebApplication" /> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="Admin" /> </and> <and> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="User" /> </and> </or> </policy> <policy resource="Users" action="Put"> <or> <and> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WebApplication" /> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="Admin" /> </and> <and> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="User" /> </and> </or> </policy>
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдиреАрддрд┐ рдЦрдВрдб рд╕рд░рд▓ рд╣реИрдВ, рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдХреБрдЫ рджреЛрд╣рд░рд╛рдП рдЧрдП рд╣реИрдВред рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рднрд╛рдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ -
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣реБрдБрдЪ рдиреАрддрд┐ :
<policy resource="Users" action="GetAllUsers"> <and> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WebApplication" /> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="Admin" /> </and> </policy>
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, "рджрд╛рд╡реЛрдВ" рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдЬрд┐рдирдореЗрдВ "рджрд╛рд╡рд╛" рджреЛрдиреЛрдВ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЕрдм рдПрдХ рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рдХрд▓реНрдк
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ :
<policy resource="Users" action="GetUserById"> <or> <and> <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system" claimValue="WebApplication" /> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="Admin" /> </and> <and> <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="User" /> </and> </or> </policy>
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реА рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рд▓реА
..
рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд╣рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╡реИрдз рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ
рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ
and/or
"
and/or
" рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЕрддреНрдпрдВрдд рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдареЛрд░рддрд╛ рд╕реЗ "
and/or
"
and/or
"рдмреНрд▓реЙрдХ" рдХреЗ рдЕрдВрджрд░ рджреЛ "рдмрд░рд╛рдмрд░" рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╢рд░реНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ "рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐
рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ", рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЕрдм рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдмрдХрд┐
throw new NotImplementedException()
рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
throw new NotImplementedException()
рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо
PolicyReader
рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ:
рдЦреИрд░, рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдкреЙрд▓рд┐рд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛, рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдпрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЖрдк рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╡рд╣ рдЪрд░рдг рдЬреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред
2. рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рджрд╛рд╡реЗ
рдпрд╣ рддрдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдкрд╣рд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдлрд▓ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ тАЬрджрд╛рд╡реЗтАЭ рдХреЛ рднрд░реЗрдВред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо
рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдерд┐рдВрдХрдЯреНрд░реЗрдХреНрдЪрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
редdentityModel.45 ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NuGet рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
Install-Package Thinktecture.IdentityModel
WebApiConfig
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░
WebApiConfig
рдЧрдпрд╛ рд╣реИ:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { var authentication = CreateAuthenticationConfiguration(); config.MessageHandlers.Add(new AuthenticationHandler(authentication)); config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.EnableSystemDiagnosticsTracing(); config.Filters.Add(new ClaimsAuthorizeAttribute()); } private static AuthenticationConfiguration CreateAuthenticationConfiguration() { var authentication = new AuthenticationConfiguration { ClaimsAuthenticationManager = new AuthenticationManager(), RequireSsl = false
рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЖрдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
IWebSecurityService
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдк рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
return username == password;
рдЕрдм, рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╣рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ "рджрд╛рд╡реЛрдВ" рдХреЗ рдореВрд▓ рд╕реЗрдЯ рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣
ClaimsAuthenticationManager
, рдпрд╛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╣рдорд╛рд░реЗ рд╡рдВрд╢рдЬ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ
рдкрд╣рд▓реЗ рд╣реА рдкрдВрдЬреАрдХреГрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ :
public class AuthenticationManager : ClaimsAuthenticationManager { public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal) { if (!incomingPrincipal.Identity.IsAuthenticated) { return base.Authenticate(resourceName, incomingPrincipal); } var claimsService = ServiceLocator.Current.GetInstance<IUsersClaimsService>(); var claims = claimsService.GetUserClaims(incomingPrincipal.Identity.Name); foreach (var userClaim in claims) { incomingPrincipal.Identities.First().AddClaim(new Claim(userClaim.Type, userClaim.Value)); } return incomingPrincipal; } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ, рддреЛ рдЙрдирдХрд╛ "рджрд╛рд╡рд╛" рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ,
IUsersClaimsService
рдХреЗ рдирдП рдмрдирд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред "рдкрд░рд┐рд╡рд░реНрддрди" рдХреЗ рдмрд╛рдж,
ClaimsPrincipal рдЙрджрд╛рд╣рд░рдг рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ
рдЬрд╛рддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ред
рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рддреНрдпрд╛рдкрди
рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ "рджрд╛рд╡реЛрдВ" рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП
AuthenticationManager
рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗред
IUsersClaimsService
рдХрд╛ рдЙрдкрдпреЛрдЧ
IUsersClaimsService
рдмрдЬрд╛рдп
IUsersClaimsService
рдирд┐рдореНрди рдХреЛрдб
IUsersClaimsService
:
public class AuthenticationManager : ClaimsAuthenticationManager { public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal) { ... if (incomingPrincipal.Identity.Name.ToLower().Contains("user")) { incomingPrincipal.Identities.First().AddClaim(new Claim(ClaimTypes.Role, "User")); } return incomingPrincipal; } }
рдЦреИрд░, рдЕрдм рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рдирдХреЗ рд▓реЙрдЧрд┐рди рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рд╢рдмреНрдж рд╣реИ, рдЙрдирдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд "рджрд╛рд╡рд╛" рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рд▓рд┐рдВрдХ
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: [рдкреЛрд░реНрдЯ] / рдПрдкреАрдЖрдИ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
рд╣рдо рдкреЛрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рд╕рд░рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдмрдВрдзрдХ "рджрд╛рд╡реЛрдВ" рдХреЗ рд╕реЗрдЯ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдорд╛рддреНрд░ рдирд╢реНрд╡рд░ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ:

рдЕрдм рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХреНрд╕реЗрд╕ рдкреЙрд▓рд┐рд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, рд╣рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдереА, рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП ~ ~ рдПрдкреАрдЖрдИ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ / 100 рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЖрдИрдбреА = 100 рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
рдФрд░ рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕рд▓рд┐рдП рд╣рдо WIF рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдП, рдПрдХ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдЫрд╛рдВрдЯ рджрд┐рдпрд╛, рдЬрд╣рд╛рдБ рд╕реЗ рдПрдХ рд▓рдЪреАрд▓реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ "рдХреЛрдбрд┐рдд" рднреАред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред