Разница между «aud» и «iss» в jwt

13

Я хочу реализовать более надежную службу аутентификации, и jwtэто большая часть того, что я хочу сделать, и я понимаю, как писать код, но у меня возникли небольшие проблемы с пониманием различий между зарезервированными issи audутверждениями. Я понимаю, что один определяет сервер, который выдает токен, а другой относится к приложению, которое предназначено для использования. Но, насколько я понимаю, это то, что моя аудитория и издатель - это одно и то же, я myserver.comвыдаю токен, чтобы люди, которые приходят, myserver.comмогли быть авторизованы и аутентифицированы. Я полагаю, что не вижу различий между двумя утверждениями, хотя знаю, что есть одно.
Была хорошая статья, написанная наmsdn на все зарезервированные претензии, и именно здесь я запутался больше всего, потому что их издатель и аудитория были совершенно разными.

Адам МакГурк
источник
Вы можете быть заинтересованы JWT RFC-7519
Laiv

Ответы:

10

Они предназначены для сценариев, в которых у вас есть полномочия на выдачу токена, которые не совпадают с приложением, которое является предполагаемым получателем.

Это может не отличаться для вашего приложения.

Но рассмотрим масштабное приложение. Возможно, у вас есть сервер OAuth или SSO, который выдает сертификаты, и приложение, которому нужен токен, который показывает, что сервер SSO проверил учетные данные пользователя и разрешил пользователю использовать приложение. В этом случае у вас может быть токен с "aud": "aud.example.com"и "iss": "sso.example.com".

Павел
источник
А ну понятно. Это было недоразумение с моей стороны, потому что я думал о двух вещах: 1. Вы должны были использовать и «iss», и «aud» как часть требований. 2. Они должны были быть уникальными друг для друга. Это, очевидно, не правда. Итак, если у вас есть такое заявление, как у меня, вы бы включили эти две заявки в свою заявку jwtили оставили бы их, поскольку они будут идентичны?
Адам
Вы, конечно же, могли бы их
Пол
будет audиногда третья сторона или нет?
Энди
Я думаю, я также запутался, почему области не будут использоваться для указания того, что пользователь одобрен для данного приложения.
Энди
Да, audможет быть одним значением или массивом. Он должен соответствовать каждому предполагаемому получателю или обработчику. Допустим, вы пользователь (или приложение), который хочет вызвать api.example.com для выполнения запроса. Если api.example.com доверяет какой-либо сторонней службе проверки подлинности (например, Auth0) для обработки проверки подлинности, то эта служба проверки подлинности должна заполниться aud«api.example.com», а приложение на «api.example.com» должно проверить, что это дело. Области являются более детализированными, чем аудитория, и также могут быть включены в полезную нагрузку.
Пол