2016-12-14 7 views
0

При входе в Auth0:При обновлении id_token через refresh_token в Auth0, JTI (JWT ID) не в новом id_token

POST https://my.auth0.com/oauth/ro 
{ 
    "client_id": "<client-id>", 
    "username": "[email protected]", 
    "password": "••••••••", 
    "connection": "<auth0-connection>", 
    "grant_type": "password", 
    "scope":  "openid offline_access jti email", 
    "device":  "<device-id>" 
} 
// Response 
{ 
    "refresh_token": "<refresh-token>", 
    "id_token": "<id-token>", 
    "access_token": "<access-token>", 
    "token_type": "bearer" 
} 
// id_token JWT payload 
{ 
    "jti": "3d4c5e97-3543-4c53-b46e-3aa965cd5a34", 
    "email": "[email protected]", 
    "email_verified": false, 
    "iss": "https://my.auth0.com/", 
    "sub": "auth0|<id>", 
    "aud": "<aud>", 
    "exp": 1481766419, 
    "iat": 1481730461 
} 

если я указываю jti в моей компетенции, возвращаемый id_token, который является JWT, будет содержат jti. Наличие jti в JWT рекомендуется Auth0. jti s однозначно идентифицирует JWT и может использоваться для таких вещей, как черные списки JWT.

По некоторым причинам, хотя, если я пытаюсь получить новый id_token используя токен обновления:

POST https://my.auth0.com/delegation 
{ 
    "client_id":  "<client-id>", 
    "grant_type":  "urn:ietf:params:oauth:grant-type:jwt-bearer", 
    "refresh_token": "<refresh-token>", 
    "api_type":  "app", 
    "scope":   "openid offline_access jti email", 
    "device":   "<device-id>" 
} 
// Response 
{ 
    "token_type": "Bearer", 
    "expires_in": 35958, 
    "id_token": "<id-token>" 
} 
// id_token JWT payload 
{ 
    "email": "[email protected]", 
    "email_verified": false, 
    "iss": "https://my.auth0.com/", 
    "sub": "auth0|<id>", 
    "aud": "<aud>", 
    "exp": 1481766678, 
    "iat": 1481730720, 
    "azp": "<azp>" 
} 

, даже если я указываю jti в моей компетенции, то id_token возвращенное не содержит jti.

Это ошибка? Пожалуйста помоги.

ответ

0

Требование jti не генерируется или не включается по умолчанию. Если вы видите, что поведение наиболее вероятным объяснением является то, что у вас есть пользовательское правило, которое делает следующее:

function (user, context, callback) { 
    user.jti = require('uuid').v4(); 
    callback(null, user, context); 
} 

Это означает, что, когда вы включаете jti как объем, что значение приобретает включенную в результате ID Токен, потому что он получен из этого свойства. При прохождении делегирования претензии jti, похоже, получают особое обращение, и при обновлении они игнорируются. Однако использование делегирования для обновления не рекомендуется, если вы хотите продолжить этот подход и просто нуждаетесь в уникальном идентификаторе в JWT, если вы используете не-зарезервированное имя заявки, вы можете это обойти. Например, в правиле:

function (user, context, callback) { 
    user.myjti = require('uuid').v4(); 
    callback(null, user, context); 
} 

Тогда на обоих запросов включают в себя myjti сферу; быстрый тест показал, что это работает и при использовании делегирования.

+0

спасибо! Вы были правы, было правило, устанавливающее jti. Какую конечную точку я должен использовать, чтобы получить новый id_token, используя мой refresh_token? Я попробовал https://dev-innit.auth0.com/oauth/token с {grant_type: "refresh_token", refresh_token: }, и я получаю unsupported_grant_type. Я предпочел бы использовать правильную конечную точку, кроме создания собственного свойства идентификатора JWT. – enamrik

+0

Чтобы использовать '/ oauth/token' с типом гранта' refresh_token', вам нужно будет включить авторизацию * OAuth 2.0 API * в расширенных настройках учетной записи, а затем также включить флажок * OIDC Conformant * на клиенте уровень приложения. Однако, несмотря на то, что я не верю, что правила в настоящее время поддерживаются при обновлении через конечную точку маркера, чтобы вы не смогли добавить претензию к значению. Пока что пользовательское имя заявки и использование конечной точки делегирования - это то, что доступно. –

+0

Спасибо, это было действительно ясно и прямо. Я перейду с конечной точкой '/ делегирования, а затем'/oauth/token' будет поддерживать пользовательские претензии. – enamrik