Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
MSAL Node çeşitli yetkilendirme kodu hibelerini desteklediğinden, her bir hibe ve buna karşılık gelen istek için farklı genel API'ler desteklenir. Bu makale, her akış için kullanılabilen farklı genel API'ler ve ilgili istek türü hakkında size yol gösterir. Uygulamanız için yetkilendirme kodu akışını uygulamanız kesinlikle önerilir.
Yetkilendirme Kodu Akışı
Genel API'ler
getAuthCodeUrl(): Bu API, MSAL Node için
authorization code grantilk adımıdır. İstek AuthorizationUrlRequest türündedir. Uygulamaya, birauthorization codeoluşturmak için kullanılabilecek bir URL gönderilir. Bu URL, kullanıcının kimlik bilgilerini girebileceği seçtiği bir tarayıcıda açılabilir ve ardından, birauthorization codeile, uygulama kaydı sırasında kaydedilenredirectUriöğesine geri yönlendirilir.authorization code, artık aşağıdaki adımlatokenkarşılığında kullanılabilir. Ortak istemci uygulaması için yetkilendirme kodu akışı kullanılıyorsa, PKCE'nin önerildiğini unutmayın.acquireTokenByCode(): Bu API, MSAL Node için
authorization code grantikinci adımıdır. Burada yapılan istek AuthorizationCodeRequest türünde olmalıdır. Uygulama, yukarıdaki adımın bir parçası olarak alınanauthorization codeöğesini iletti ve bunun karşılığında birtokenaldı. Ortak istemci uygulaması için yetkilendirme kodu akışı kullanılıyorsa, PKCE önerildiğini unutmayın.
const authCodeUrlParameters = {
scopes: ["sample_scope"],
redirectUri: "your_redirect_uri",
};
// get url to sign user in and consent to scopes needed for application
cca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: "authorization_code",
redirectUri: "your_redirect_uri",
scopes: ["sample_scope"],
};
// acquire a token by exchanging the code
cca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
}).catch((error) => {
console.log(error);
});
Cihaz Kodu Akışı
Genel API'ler
-
acquireTokenByDeviceCode(): Bu API, uygulamanın Cihaz Kodu izniyle belirteç almasını sağlar. İstek , DeviceCodeRequest türündedir. Bu API, OAuth 2.0 cihaz kodu akışını kullanarak yetkilendirme sunucusundan bir
tokenedinir. Bu akış, tarayıcı erişimi olmayan veya giriş kısıtlamaları olan cihazlar için tasarlanmıştır. Yetkilendirme sunucusu doğrulama kodu, son kullanıcı kodu ve son kullanıcı doğrulama URI'siyle bir DeviceCode nesnesi gönderir. DeviceCode nesnesi bir geri çağırma yoluyla sağlanır ve son kullanıcıya kimlik bilgilerini giriş için doğrulama URI'sine gitmek için başka bir cihaz kullanması talimatı verilmelidir. İstemci gelen istekleri alamadığından, son kullanıcı kimlik bilgilerinin girişini tamamlayana kadar yetkilendirme sunucusunu tekrar tekrar yoklar.
const msalConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(msalConfig);
const deviceCodeRequest = {
deviceCodeCallback: (response) => (console.log(response.message)),
scopes: ["user.read"],
};
pca.acquireTokenByDeviceCode(deviceCodeRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Belirteç Akışını Yenile
Genel API'ler
-
acquireTokenByRefreshToken: Bu API, yeni bir belirteç kümesi için sağlanan yenileme belirtecini değiştirerek bir belirteç alır. İstek RefreshTokenRequest türündedir.
refresh tokenbir yanıtta kullanıcıya hiçbir zaman döndürülemez, ancak kullanıcı önbelleğinden erişilebilir. Etkileşimli olmayan senaryolar için kullanmanızacquireTokenSilent()önerilir. acquireTokenSilent() kullanılırken, MSAL belirteçlerin önbelleğe alınmasını ve yenilenmesini otomatik olarak işler.
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(config);
const refreshTokenRequest = {
refreshToken: "",
scopes: ["user.read"],
};
pca.acquireTokenByRefreshToken(refreshTokenRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Sessiz Akış
Genel API'ler
-
acquireTokenSilent: Bu API, önbellek kullanıcı tarafından sağlanırsa veya bu çağrıdan önce başka bir etkileşimli akışla (örneğin, yetkilendirme kodu akışı) önbellek oluşturulduğunda sessizce bir belirteç alır. İstek , SilentFlowRequest türündedir.
token, kullanıcı belirtecin istendiği hesabı belirttiğinde sessizce edinilir.
/**
* Cache Plugin configuration
*/
const cachePath = "path_to_your_cache_file/msal_cache.json"; // Replace this string with the path to your valid cache file.
const readFromStorage = () => {
return fs.readFile(cachePath, "utf-8");
};
const writeToStorage = (getMergedState) => {
return readFromStorage().then(oldFile =>{
const mergedState = getMergedState(oldFile);
return fs.writeFile(cachePath, mergedState);
})
};
const cachePlugin = {
readFromStorage,
writeToStorage
};
/**
* Public Client Application Configuration
*/
const publicClientConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
redirectUri: "your_redirectUri_here",
},
cache: {
cachePlugin
},
};
/** Request Configuration */
const scopes = ["your_scopes"];
const authCodeUrlParameters = {
scopes: scopes,
redirectUri: "your_redirectUri_here",
};
const pca = new msal.PublicClientApplication(publicClientConfig);
const msalCacheManager = pca.getCacheManager();
let accounts;
pca.getAuthCodeUrl(authCodeUrlParameters)
.then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: req.query.code,
redirectUri: "http://localhost:3000/redirect",
scopes: scopes,
};
pca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
// get Accounts
accounts = msalCacheManager.getAllAccounts();
// Build silent request
const silentRequest = {
account: accounts[0], // You would filter accounts to get the account you want to get tokens for
scopes: scopes,
};
// Acquire Token Silently to be used in MS Graph call
pca.acquireTokenSilent(silentRequest).then((response) => {
console.log("\nSuccessful silent token acquisition:\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
İstemci Kimlik Bilgileri Akışı
Genel API'ler
- acquireTokenByClientCredential: Bu API, başka bir web hizmetini çağırırken kimlik doğrulaması yapmak için gizli istemci uygulamasının kimlik bilgilerini kullanarak bir belirteç alır (kullanıcının kimliğine bürünmek yerine). Bu senaryoda istemci genellikle bir orta katman web hizmeti, bir daemon hizmeti veya arka uç web uygulamasıdır. Daha yüksek bir güvence düzeyi için Microsoft kimlik platformu, çağrı hizmetinin kimlik bilgisi olarak bir sertifika (paylaşılan gizli dizi yerine) kullanmasına da izin verir. İstek ClientCredentialRequest türündedir.
Gizli anahtarları güvenli kullanma
Gizli bilgiler asla doğrudan koda gömülmemelidir. Dotenv npm paketi, gizli dizilerin yanlışlıkla karşıya yüklenmesini önlemek için .gitignore dosyasına eklenmesi gereken bir .env dosyasında (projenin kök dizininde bulunur) gizli dizileri depolamak için kullanılabilir.
import "dotenv/config"; // process.env now has the values defined in a .env file
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
clientSecret: process.env.clientSecret
}
};
// Create msal application object
const cca = new msal.ConfidentialClientApplication(config);
// With client credentials flows permissions need to be granted in the portal by a tenant administrator.
// The scope is always in the format "<resource>/.default"
const clientCredentialRequest = {
scopes: ["https://graph.microsoft.com/.default"], // replace with your resource
};
cca.acquireTokenByClientCredential(clientCredentialRequest).then((response) => {
console.log("Response: ", response);
}).catch((error) => {
console.log(JSON.stringify(error));
});
Flow adına
- acquireTokenOnBehalfOf: Bu API, bir uygulama bir hizmet/web API'sini çağırdığında ve bu hizmet/web API de ardından başka bir kimlik doğrulama akışı (cihaz kodu, kullanıcı adı/parola vb.) kullanan başka bir hizmet/web API'sini çağırmak zorunda olduğunda kullanılan On-Behalf-Of akışını uygular. Erişim belirteci başlangıçta web API'si tarafından alınır (web API akışlarından herhangi biri tarafından) ve web API'si bu belirteci OBO aracılığıyla başka bir belirteçle değiştirebilir. İstek OnBehalfOfRequest türündedir
Kullanım yönergeleri için lütfen On Behalf Of akış örneğine bakın: