Я реализую сервер авторизации/ресурсов OAuth2 на основе DotNetOpenAuth. Мой сервер будет выпускать токены доступа с очень долгим сроком службы. Эти жетоны будут использоваться с устройств iOS. Поток, как я вижу, выглядит следующим образом: 1) пользователю предлагается ввести свое имя пользователя/пароль на устройстве iOS; 2) запрашивается токен доступа с типом предоставления типа учетных данных пароля владельца ресурса; 3) токен предоставляется и сохраняется на устройстве iOS для будущего использования.Как заставить истечение токена доступа OAuth2 с помощью DotNetOpenAuth
Теперь время от времени пользователи становятся инвалидами. Я хотел бы одновременно аннулировать токен. Как мне это сделать? I подозреваемый, что мне нужно использовать метод ICryptoKeyStore.RemoveKey
, но не уверен, как найти, какой ключ удалить.
Примечание 1: в будущем сервер будет использоваться сторонними веб-приложениями.
Примечание 2: требование о предоставлении типа гранта учетных записей владельца ресурса основывается на том факте, что было решено, что реализация переадресации браузера на устройстве iOS не стоит времени.
Update 1 Некоторые раскопки в исходном коде позволяет предположить, что DotNetOpenAuth не поддерживает эту возможность, чтобы заставить истечение срока действия маркеров из коробки. Более того, в стандартном времени реализации токена даже не проверяется. Насколько я вижу, calss отвечает за это StandardAccessTokenAnalyzer
и игнорирует свойства Lifetime
и UtcCreationDate
. Также не кажется, что стандартный класс ResourceServer
имеет любой кодированный доступ к базе данных, действительность маркера проверяется только содержимым токена, поэтому кажется, что если мне нужно добавить способность истекать токенов, мне нужно подключить ResourseServer
к базе данных самостоятельно , Я что-то упускаю?
Update 2 Я думаю, что я нашел ответ здесь: https://groups.google.com/forum/#!topic/dotnetopenid/aLabu1ujkt4 Это не то, что я надеялся, и я до сих пор есть несколько unclarities. Например, Андрей написал:
Вашего собственный класс, то может взять маркер доступа, а затем использовать частный запрос HTTP на сервер авторизации для проверки продолжения достоверности маркеров.
Неясно как эта проверка может случиться, учитывая, что AccessToken
не включает Authorization Id. Это может затруднить поиск целевой записи авторизации. Теоретически мы можем попытаться найти это с помощью комбинации времени клиента, пользователя и времени, но, насколько я вижу, нет никакой гарантии, что они будут уникальными.
Эндрю, спасибо, что нашли время ответить. Я все еще работаю над этой проблемой, и я очень скоро впитываю ваш ответ и правильно отвечаю. Теперь я просто хочу прокомментировать * DotNetOpenAuth проверяет и отклоняет истекшие токены доступа. Это просто не в этом классе. Он проверяется в коде, который десериализует токены доступа. * Конечно, вы правы, я уже это обнаружил =) Не знал этого на момент написания, извините. –
* Пользователь, скорее всего, уже зарегистрировался на вашем сервере в браузере устройства * На данный момент нет веб-приложения для входа в систему. Так что это не так. Конечно, я мог бы сделать страницу входа в систему только ради поддержки потока, но поскольку я не программировал устройства iOS, общим решением было использовать поток ROPC. Одна из причин заключалась в том, что мы не хотим, чтобы приложение отображалось в Safari, а затем возвращалось в приложение каждый раз, когда токен должен быть обновлен. Это окажется неоптимальным для пользователя. –
* Кстати, тип предоставления пароля владельца ресурса, скорее всего, не будет поддерживаться для клиентов без аутентификации (TBD) *. Это очень интересная информация. Не могли бы вы расширить? Я думаю, что то, что вы говорите, нелогично, потому что родное приложение просто * не может * гарантировать конфиденциальность секретного пароля клиента, поэтому он должен быть публичным клиентом. И поскольку взаимодействие браузера в собственном приложении громоздко и сложно, то единственным жизнеспособным типом гранта является ROPC. Сделать это недоступно как часть спецификации, кажется, является контрпродуктивным. –