2017-08-18 105 views
0

我有這個問題,我不知道它是一個「bug」還是我的錯在某處。Auth0 JWT作爲訪問令牌只在第二次登錄

所有這些都是針對ASP.NET Core Angular上的SAP,它正在訪問託管頁面上的Auth0。

我已經更新了我的託管網頁Auth0lock對象的託管的網頁上inculde一個params對象與指定的觀衆

var lock = new Auth0Lock(config.clientID, config.auth0Domain, { 
    auth: { 
    redirectUrl: config.callbackURL, 
    responseType: 'token', 
    params: { 
     "audience": "https://api.webatom.com" 
    } 
    }, 
    assetsUrl: config.assetsUrl, 
    allowedConnections: connection ? [connection] : null, 
    rememberLastLogin: !prompt, 
    language: language, 
    languageDictionary: languageDictionary, 
    theme: { 
    //logo:   'YOUR LOGO HERE', 
    //primaryColor: 'green' 
    }, 
    prefill: loginHint ? { email: loginHint, username: loginHint } : null, 
    closable: false, 
    // uncomment if you want small buttons for social providers 
    // socialButtonStyle: 'small' 
}); 

在第一次登錄我得到的通常的身份驗證結果,我收到了智威湯遜爲id_token和訪問令牌的短字符串,並且我在auth0中沒有收到有關帳戶訪問請求的消息。

在第二次和其他登錄期間,我得到我想要的。我收到消息,並將JWT作爲訪問令牌和id_token作爲空。

從第一次登錄開始,我該如何獲得第二個結果?這是一個錯誤還是我做錯了什麼?

謝謝。 PS:我沒有任何規則或掛鉤在那個時候執行。

回答

-1

到目前爲止,我還發現了一個有趣的工作圍繞...

當返回一個不透明的令牌,你可以簡單地複製其AUD哈希並在將JwtBearerOptions對象創建到啓動類中時將其粘貼到Audience參數中。

,使用控制器API這就是爲什麼我需要從一開始就在智威湯遜的主要原因[授權]註釋當與無效的觀衆修正錯誤。

我認爲讓受衆在jwt上爲JwtBearer正確解碼的唯一方法是將受衆設置在託管頁面上,以便在訪問令牌中使用JWT進行返回。

0

第一步:添加https://jwt.io作爲允許回調到客戶端,恢復了Auth0託管登錄頁面返回到默認,然後修改下面與您自己設置的URL(即刪除您所做的更改。) ,並將其粘貼到瀏覽器網址中並返回。

https://{{YOUR_TENANT}}.auth0.com/login?client={{YOUR_CLIENT_ID}}&redirectUrl=https://jwt.io&responseType=token&connection={{YOUR_CONNECTION_NAME}}&audience=https://api.webatom.com&scope=openid 

一切順利,它應該返回一個JWT訪問令牌並將其自動填充到JWT.io文本區域中。

接下來,嘗試使用 - 使用Auth0的授權URL。再次,使用Auth0默認託管登錄頁面,而不是您修改的那個頁面。

https://{{YOUR_TENANT}}.auth0.com/authorize?client_id={{YOUR_CLIENT_ID}}&protocol=oauth2&redirect_uri=https://jwt.io&response_type=token&scope=openid profile&audience=https://api.webatom.com&nonce=123&state=xyz 

應該是相同的結果。大概這就是你想要的每一次?

如果您確實需要一個Id令牌,那麼只需將responseType/response_type修改爲token id_token即可。

因此,我建議您不要直接修改Auth0託管登錄頁面設置鎖定(身份驗證相關參數..),而只需通過上述/authorize端點發送請求參數。例如,如果您有一個使用auth0.js的客戶端應用程序,則可以在客戶端設置所有內容,並在用戶進行身份驗證時將其發送到客戶端。爲auth0.js庫配置

示例代碼段可能是:

auth0 = new auth0.WebAuth({ 
    domain: AUTH_CONFIG.domain, 
    clientID: AUTH_CONFIG.clientId, 
    redirectUri: AUTH_CONFIG.callbackUrl, 
    audience: "https://webapi.com", 
    responseType: 'token id_token', // just use token if you don't need id token 
    scope: 'openid profile read:book' // read:book is a scope defined for API 
    });