Как получить токен доступа Azure с помощью Node js API с помощью Axios
У меня есть бэкэнд в Nodejs, использующий Axios для вызовов API. Мне нужно реализовать аутентификацию Azure, чтобы получить токен, поэтому я следовал приведенному ниже образцу:
В образце используется экспресс и есть перенаправления для первого получения и авторизации, а затем токена. Я пытался найти образец с помощью Axios, но не смог его найти.
Это то, что у меня есть до сих пор, идея использовать результат для получения токена, любые рекомендации очень ценят это.
const msal = require('@azure/msal-node');
const REDIRECT_URI = "http://localhost:3000/";
const LOGIN = "https://login.microsoftonline.com/";
const config = {
auth: {
clientId: "12345678910",
authority: "https://login.microsoftonline.com/12345678910",
clientSecret: "Secret",
knownAuthorities: ["https://login.microsoftonline.com/12345678910"
]
}
};
const pca = new msal.ConfidentialClientApplication(config);
module.exports = {
async getAzureAdToken(){
try {
let instance = axios.create({baseURL: LOGIN});
const authCodeUrlParameters = {
scopes: ["user.read"],
redirectUri: REDIRECT_URI
};
pca.getAuthCodeUrl(authCodeUrlParameters).then((response) =>{
let url = response.substring(LOGIN.length);
instance.get(url).then((result) =>{
});
}).catch((error) => console.log(JSON.stringify(error)));
} catch (error) {
throw error
}
},
1 ответ
Вы можете использовать поток учетных данных клиента, чтобы получить токен доступа с помощью axios. Поток учетных данных клиента позволяет веб-службе (конфиденциальному клиенту) использовать свои собственные учетные данные вместо олицетворения пользователя для аутентификации при вызове другой веб-службы. В потоке учетных данных клиента разрешения предоставляются непосредственно самому приложению администратором. Нам нужно добавить разрешения для приложений в API Permission.
Тест в почтальоне:
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<client_id>
&scope=https://graph.microsoft.com/.default
&client_secret=<client_secret>
&grant_type=client_credentials
Код с использованием Nodejs:
// Replace these values from the values of you app
const APP_ID = '[APP_ID/CLIENT_ID]';
const APP_SECERET = '[CLIENT_SECRET]';
const TOKEN_ENDPOINT ='https://login.microsoftonline.com/[TENANT_ID]/oauth2/v2.0/token';
const MS_GRAPH_SCOPE = 'https://graph.microsoft.com/.default';
const axios = require('axios');
const qs = require('qs');
const postData = {
client_id: APP_ID,
scope: MS_GRAPH_SCOPE,
client_secret: APP_SECERET,
grant_type: 'client_credentials'
};
axios.defaults.headers.post['Content-Type'] =
'application/x-www-form-urlencoded';
let token = '';
axios
.post(TOKEN_ENDPOINT, qs.stringify(postData))
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log(error);
});