Содержание
- 2. www.synerdocs.ru Построение централизованной системы идентификации и аутентификации на базе IdentityServer
- 3. www.synerdocs.ru О продукте
- 4. www.synerdocs.ru
- 5. www.synerdocs.ru
- 6. www.synerdocs.ru API IdSvr Users Svc Svc Web Web SSO Доверие Взаимодействие Компонент Synerdocs Компонент партнера Архитектура
- 7. www.synerdocs.ru Терминология
- 8. (I) Идентификация - Кто ты? (A) Аутентификация - Действительно ли ты являешься тем, за кого себя
- 9. www.synerdocs.ru Предпосылки внедрения
- 10. www.synerdocs.ru API Users Взаимодействие Компонент Synerdocs Единственное приложение API (-) Собственный механизм выдачи и формат токенов
- 11. www.synerdocs.ru API Users Web Взаимодействие Компонент Synerdocs Добавление собственного веб клиента Forms Authentication (-) Общее хранилище
- 12. www.synerdocs.ru API Users Web Web Взаимодействие Компонент Synerdocs Компонент партнера Добавление веб клиента партнера (?) Как
- 13. www.synerdocs.ru API IdSvr Users Web Web SSO Доверие Взаимодействие Компонент Synerdocs Компонент партнера Добавление IdentityServer OIDC
- 14. www.synerdocs.ru API IdSvr Users Svc Svc Web Web SSO Доверие Взаимодействие Компонент Synerdocs Компонент партнера Добавление
- 15. www.synerdocs.ru API Users Svc Svc Web Web SSO Доверие Взаимодействие Компонент Synerdocs Компонент партнера Добавление внешних
- 16. www.synerdocs.ru IdentityServer
- 17. IdentityServer – это .NET Standard библиотека с открытым исходным кодом и развертываемый компонент (ASP.NET Core Middleware),
- 18. IdentityServer – это .NET Standard библиотека с открытым исходным кодом и развертываемый компонент (ASP.NET Core Middleware),
- 19. IdentityServer – это .NET Standard библиотека с открытым исходным кодом и развертываемый компонент (ASP.NET Core Middleware),
- 20. IdentityServer – это .NET Standard библиотека с открытым исходным кодом и развертываемый компонент (ASP.NET Core Middleware),
- 21. IdentityServer – это .NET Standard библиотека с открытым исходным кодом и развертываемый компонент (ASP.NET Core Middleware),
- 22. 2012: IdentityServer1 2013: IdentityServer2 2015: IdentityServer3 2016: IdentityServer4 OAuth 2.0 / OpenID Connect 1.0 .NET Core
- 23. Исходный код GitHub / IdentityServer NuGet пакет NuGet / IdentityServer Лицензия Apache 2.0 www.synerdocs.ru Как получить
- 24. IdentityServer реализует только серверную часть стандартов. Для взаимодействия со стороны клиента нужно воспользоваться следующими библиотеками: Классические
- 25. www.synerdocs.ru Реализованные спецификации
- 26. OpenID Connect 1.0 OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 (spec) OpenID Connect Session
- 27. www.synerdocs.ru Суммарно это около 300 страниц текста Можно ли быстро и корректно реализовать их самостоятельно?
- 28. www.synerdocs.ru Токены
- 29. Access Token, Identity Token, Reference Token, Bearer Token, JWT … Как разработчику, начинающему работать с этими
- 30. Классификация по назначению www.synerdocs.ru
- 31. Классификация по назначению www.synerdocs.ru
- 32. Классификация по способу передачи www.synerdocs.ru
- 33. Классификация по способу передачи www.synerdocs.ru
- 34. Классификация по способу использования www.synerdocs.ru
- 35. Классификация по способу использования www.synerdocs.ru
- 36. Классификация по формату www.synerdocs.ru
- 37. Классификация по формату www.synerdocs.ru HEADER PAYLOAD SIGNATURE LOCATION VERSION HEADER PAYLOAD SIGNATURE FOOTER
- 38. www.synerdocs.ru Внедрение IdentityServer
- 39. www.synerdocs.ru Серверное приложение
- 40. public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddIdentityServer(); } public void Configure(IApplicationBuilder app)
- 41. public class Startup { public IHostingEnvironment Environment { get; } public void ConfigureServices(IServiceCollection services) { //
- 42. www.synerdocs.ru Объявление клиентских приложений yield return new Client { ClientId = "web_client_id", AllowedGrantTypes = GrantTypes.Implicit, AllowedScopes
- 43. www.synerdocs.ru UI
- 44. www.synerdocs.ru Разработка всего UI полностью под ответственностью разработчика На GitHub доступен пример построения UI на базе
- 45. www.synerdocs.ru UI в примере
- 46. www.synerdocs.ru UI в Synerdocs
- 47. www.synerdocs.ru Хранилище пользователей
- 48. www.synerdocs.ru Подключение хранилища пользователей Для ASP.NET Membership / ASP.NET Identity готовые решения: https://www.nuget.org/packages/IdentityServer4.Contrib.Membership/ https://github.com/IdentityServer/IdentityServer4.AspNetIdentity В других
- 49. www.synerdocs.ru IResourceOwnerPasswordValidator public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator { public IUserService UserService { get; set; } //
- 50. www.synerdocs.ru IProfileService public class ProfileService : IProfileService { public IUserService UserService { get; set; } //
- 51. www.synerdocs.ru Клиентские приложения
- 52. www.synerdocs.ru Web клиент Synerdocs OIDC 1.0 – OWIN Security Middleware
- 53. public class Startup { public void Configuration(IAppBuilder app) { // ... app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType =
- 54. public class Startup { public void Configuration(IAppBuilder app) { // ... app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { Authority =
- 55. www.synerdocs.ru Отключение аутентификации на основе форм mode="Forms"> timeout="2880" loginUrl="~/Account/LogOn" />
- 56. www.synerdocs.ru Web клиент партнера OAuth 2.0 - Authorization Code Grant
- 57. private ActionResult RedirectToAuthority() { return Redirect("https://identity.synerdocs.ru" + "/connect/authorize" + "?response_type=code" + "&client_id=api_client_id" + "&redirect_uri=https://api-client.synerdocs.ru/app/auth" + "&state=data"
- 58. private async Task TakeAccessToken(string authorizationCode) { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new
- 59. private async Task CallApiMethod() { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("https://api.synerdocs.ru");
- 60. private async Task RefreshAccessToken() { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("https://identity.synerdocs.ru");
- 61. www.synerdocs.ru Внутренние службы OAuth 2.0 – Client Credentials Grant
- 62. private async Task TakeAccessToken() { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("https://identity.synerdocs.ru");
- 63. private async Task CallServiceMethod() { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("https://svc.synerdocs.ru");
- 64. www.synerdocs.ru Трудоемкость
- 65. Серверное приложение 1 человеко-неделя Разработка UI 2 человеко-недели Клиентские приложения 1 человеко-неделя Подводные камни и особенности
- 66. www.synerdocs.ru Подводные камни и особенности
- 67. www.synerdocs.ru Трансформация claim’ов JwtSecurityTokenHandler.InboundClaimTypeMap.Clear(); oidcOptions.Notifications = new OpenIdConnectAuthenticationNotifications { SecurityTokenValidated = ctx => { // Для
- 68. www.synerdocs.ru Перенаправление после выхода oidcOptions.Notifications = new OpenIdConnectAuthenticationNotifications { SecurityTokenValidated = ctx => { var oldIdentity
- 69. www.synerdocs.ru Обработка nonce cookie protected override void RememberNonce(OpenIdConnectMessage message, string nonce) { var cookieOptions = new
- 70. Отсутствие встроенной поддержки более старых протоколов WS-Trust, WS-Federation, SAML 1.1/2.0, OAuth 1.0, OpenID 1.0/2.0 и других
- 71. Отсутствие поддержки IdP Initiated SSO в OpenID Connect 1.0 Ведутся работы по стандартизации в черновике https://tools.ietf.org/html/draft-bradley-oauth-jwt-encoded-state-09#section-4.3
- 72. www.synerdocs.ru Выводы
- 73. Самостоятельно строить с нуля централизованную систему идентификации и аутентификации весьма сложно и рискованно Аналогично обстоит дело
- 75. Скачать презентацию