Рассмотрим следующую распределенную систему, которая использует OAuth 2.0 для авторизации и OpenID 2.0 для аутентификации.
Где
- RS1, RS2 и RS3«Серверы ресурсов» (или три различных API REST)
- APP1 и APP2 - клиенты
- AS - «Сервер авторизации» для управления токенами OAuth
- OPENID - OpenIDПоставщик 2.0.
APP2 использует RS1, который, в свою очередь, использует ресурсы на RS2 и RS3.Существует доверие между RS1, RS2, RS3, APP2, AS и OPENID, так как они разрабатываются одной и той же компанией (но разными командами).Когда пользователь получает доступ к APP2 в первый раз, APP2 автоматически авторизуется для доступа к ресурсам на RS1, RS2 и RS3 от имени пользователя.
APP1 использует ресурсы на RS2, который, в свою очередь, использует ресурсы на RS3.APP1 - это сторонний веб-сайт, которому не доверяют, и пользователю необходимо явно авторизовать APP1 для получения доступа к ресурсам на RS2 и RS3.
В большинстве примеров, касающихся OAuth 2.0, показана связь между одним ресурсом и сервером авторизации икак запрашивать, выпускать и управлять токенами.
Как защитить эту среду, используя OAuth 2.0?Например, будут ли APP2, RS1 и RS2 иметь свой собственный идентификатор клиента и секрет клиента (поскольку все они являются «клиентами» для другого сервера)?Если да, то как можно выдать токены доступа для RS1, когда он пытается получить доступ к ресурсам на RS2 и RS3 в первый раз в середине другого запроса (поступающего из APP2)?
У меня уже есть AS, OPENID, APP2 и RS1, которые были разработаны с использованием ASP.NET MVC 3, WCF 4 и DotNetOpenAuth 4. Я пытаюсь ввести RS2, RS3 и APP1 в систему, но изо всех сил пытаюсьвыяснить, как будет работать авторизация между серверами ресурсов и клиентами.Все работает под IIS 7.5 и HTTPS.