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.
için geçerlidir: beyaz onay işareti simgesine sahip Yeşil daire Workforce kiracıları gri X simgesiyle Beyaz daire
(daha fazla bilgi)
Uygulamanızın korumalı web API'lerini çağırabilmesi için bir erişim belirteci gerekir. Bu makalede, Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanarak belirteç alma işleminde size yol gösterilir.
Kapsam tanımlama
Jeton istediğinizde bir kapsam tanımlayın. Kapsam, uygulamanızın erişebileceği verileri belirler.
Kapsam tanımlamanın en kolay yolu, istenen web API'lerini App ID URI
kapsamıyla .default
birleştirmektir. Bu tanım, Microsoft kimlik platformu uygulamanızın portalda ayarlanan tüm kapsamları gerektirdiğini bildirir.
Android
String[] SCOPES = {"https://graph.microsoft.com/.default"};
Ios
let scopes = ["https://graph.microsoft.com/.default"]
Jetonları al
MSAL aracılığıyla belirteç alma
MSAL, uygulamaların sessiz ve etkileşimli bir şekilde belirteç almasına olanak tanır. veya AcquireTokenSilent()
veya AcquireTokenInteractive()
öğesini çağırdığınızda, MSAL istenen kapsamlar için bir erişim belirteci döndürür. Doğru desen, sessiz bir istekte bulunmak ve sonra etkileşimli bir isteğe geri dönmektir.
Android
String[] SCOPES = {"https://graph.microsoft.com/.default"};
PublicClientApplication sampleApp = new PublicClientApplication(
this.getApplicationContext(),
R.raw.auth_config);
// Check if there are any accounts we can sign in silently.
// Result is in the silent callback (success or error).
sampleApp.getAccounts(new PublicClientApplication.AccountsLoadedCallback() {
@Override
public void onAccountsLoaded(final List<IAccount> accounts) {
if (!accounts.isEmpty() && accounts.size() == 1) {
// One account found, attempt silent sign-in.
sampleApp.acquireTokenSilentAsync(SCOPES, accounts.get(0), getAuthSilentCallback());
} else if (accounts.isEmpty()) {
// No accounts found. Interactively request a token.
sampleApp.acquireToken(getActivity(), SCOPES, getAuthInteractiveCallback());
} else {
// Multiple accounts found. Handle according to your app logic.
// You may need to prompt the user to select an account.
}
}
});
[...]
// No accounts found. Interactively request a token.
// TODO: Create an interactive callback to catch successful or failed requests.
sampleApp.acquireToken(getActivity(), SCOPES, getAuthInteractiveCallback());
Ios
İlk olarak görünmeden bir belirteç elde etmeyi deneyin.
NSArray *scopes = @[@"https://graph.microsoft.com/.default"];
NSString *accountIdentifier = @"my.account.id";
MSALAccount *account = [application accountForIdentifier:accountIdentifier error:nil];
MSALSilentTokenParameters *silentParams = [[MSALSilentTokenParameters alloc] initWithScopes:scopes account:account];
[application acquireTokenSilentWithParameters:silentParams completionBlock:^(MSALResult *result, NSError *error) {
if (!error)
{
// You'll want to get the account identifier to retrieve and reuse the account
// for later acquireToken calls
NSString *accountIdentifier = result.account.identifier;
// Access token to call the web API
NSString *accessToken = result.accessToken;
}
// Check the error
if (error && [error.domain isEqual:MSALErrorDomain] && error.code == MSALErrorInteractionRequired)
{
// Interactive auth will be required, call acquireTokenWithParameters:error:
return;
}
}];
let scopes = ["https://graph.microsoft.com/.default"]
let accountIdentifier = "my.account.id"
guard let account = try? application.account(forIdentifier: accountIdentifier) else { return }
let silentParameters = MSALSilentTokenParameters(scopes: scopes, account: account)
application.acquireTokenSilent(with: silentParameters) { (result, error) in
guard let authResult = result, error == nil else {
let nsError = error! as NSError
if (nsError.domain == MSALErrorDomain &&
nsError.code == MSALError.interactionRequired.rawValue) {
// Interactive auth will be required, call acquireToken()
return
}
return
}
// You'll want to get the account identifier to retrieve and reuse the account
// for later acquireToken calls
let accountIdentifier = authResult.account.identifier
// Access token to call the web API
let accessToken = authResult.accessToken
}
Eğer MSAL MSALErrorInteractionRequired
geri döndürürse, belirteçleri etkileşimli olarak almayı deneyin.
UIViewController *viewController = ...; // Pass a reference to the view controller that should be used when getting a token interactively
MSALWebviewParameters *webParameters = [[MSALWebviewParameters alloc] initWithAuthPresentationViewController:viewController];
MSALInteractiveTokenParameters *interactiveParams = [[MSALInteractiveTokenParameters alloc] initWithScopes:scopes webviewParameters:webParameters];
[application acquireTokenWithParameters:interactiveParams completionBlock:^(MSALResult *result, NSError *error) {
if (!error)
{
// You'll want to get the account identifier to retrieve and reuse the account
// for later acquireToken calls
NSString *accountIdentifier = result.account.identifier;
NSString *accessToken = result.accessToken;
}
}];
let viewController = ... // Pass a reference to the view controller that should be used when getting a token interactively
let webviewParameters = MSALWebviewParameters(authPresentationViewController: viewController)
let interactiveParameters = MSALInteractiveTokenParameters(scopes: scopes, webviewParameters: webviewParameters)
application.acquireToken(with: interactiveParameters, completionBlock: { (result, error) in
guard let authResult = result, error == nil else {
print(error!.localizedDescription)
return
}
// Get access token from result
let accessToken = authResult.accessToken
})
iOS ve macOS için MSAL, etkileşimli veya sessiz bir şekilde belirteç almak için çeşitli değiştiricileri destekler:
- Token almak için genel parametreler
- Etkileşimli belirteç alma parametreleri
- Sessiz belirteç alma parametreleri
MSAL.NET'de zorunlu parametreler
AcquireTokenInteractive
yalnızca bir zorunlu parametresi vardır: scopes
. parametresi, scopes
belirtecin gerekli olduğu kapsamları tanımlayan dizeleri numaralandırır. Belirteç Microsoft Graph içinse, gerekli kapsamları her Microsoft Graph API'sinin API başvurusunda bulabilirsiniz. Referans belgelerinde "İzinler" bölümüne gidin.
Örneğin, kullanıcının kişilerini listelemek için "User.Read", "Contacts.Read" kapsamını kullanın. Daha fazla bilgi için, bkz. Microsoft Graph izinleri referansı.
Android'de uygulamayı oluştururken PublicClientApplicationBuilder
kullanarak üst etkinliği belirtebilirsiniz. O sırada üst etkinliği belirtmezseniz, daha sonra aşağıdaki bölümde olduğu gibi .WithParentActivityOrWindow
yoluyla belirtebilirsiniz. Üst etkinlik belirtirseniz, belirteç etkileşimden sonra bu üst etkinliğe geri döner. Belirtmezseniz, .ExecuteAsync()
çağrı bir istisna fırlatır.
MSAL.NET'da belirli isteğe bağlı parametreler
Aşağıdaki bölümlerde, MSAL.NET'daki isteğe bağlı parametreler açıklanmaktadır.
HızlıCevapla
parametresi, WithPrompt()
bir istem belirterek kullanıcıyla etkileşimi denetler.
sınıfı aşağıdaki sabitleri tanımlar:
SelectAccount
, güvenlik belirteci hizmetini (STS) hesap seçimi iletişim kutusunu sunmaya zorlar. İletişim kutusu, kullanıcının oturum açtığı hesapları içerir. Kullanıcının farklı kimlikler arasından seçim yapmasına izin vermek istediğinizde bu seçeneği kullanabilirsiniz. Bu seçenek, MSAL'ninprompt=select_account
kimlik sağlayıcısına göndermesini sağlar.Sabit
SelectAccount
varsayılan değerdir ve kullanılabilir bilgilere göre mümkün olan en iyi deneyimi etkili bir şekilde sağlar. Kullanılabilir bilgiler hesap, kullanıcı için bir oturumun varlığı vb. içerebilir. Bunu yapmak için iyi bir nedeniniz yoksa bu varsayılanı değiştirmeyin.Consent
daha önce onay verilmiş olsa bile kullanıcıdan onay istemenizi sağlar. Bu durumda, MSAL kimlik sağlayıcısına gönderirprompt=consent
.Güvenlik odaklı uygulamalarda, kuruluş yönetiminin kullanıcıların uygulamayı her kullandıklarında onay iletişim kutusunu görmesini gerektirdiği durumlarda,
Consent
sabit değerini kullanmak isteyebilirsiniz.ForceLogin
, istem gerekli olmasa bile hizmetin kullanıcının kimlik bilgilerini istemesini sağlar.Belirteç alımı başarısız olursa ve kullanıcının yeniden oturum açmasına izin vermek istiyorsanız bu seçenek yararlı olabilir. Bu durumda, MSAL kimlik sağlayıcısına gönderir
prompt=login
. Bu seçeneği, kuruluşun idaresinin kullanıcının uygulamanın belirli bölümlerine her eriştiğinde oturum açmasını gerektirdiği güvenlik odaklı uygulamalarda kullanmak isteyebilirsiniz.Never
yalnızca .NET 4.5 ve Windows Çalışma Zamanı (WinRT) içindir. Bu sabit değer, kullanıcıya sormaz, ancak gizli yerleşik web görünümünde depolanan çerezi kullanmayı dener. Daha fazla bilgi için bkz . MSAL.NET ile web tarayıcılarını kullanma.Bu seçenek başarısız olursa,
AcquireTokenInteractive
kullanıcı arabirimi etkileşimi gerektiğini bildiren bir özel durum oluşturur. Ardından başka birPrompt
parametre kullanın.NoPrompt
kimlik sağlayıcısına istem göndermez.Bu seçenek yalnızca Azure Active Directory B2C'deki profil düzenleme ilkeleri için kullanışlıdır. Daha fazla bilgi için bkz . B2C özellikleri.
Ek Yetki Kapsamı ile Onay
Kullanıcının çeşitli kaynaklara WithExtraScopeToConsent
ön onay sağlamasını istediğiniz gelişmiş bir senaryoda değiştiriciyi kullanın. Bu değiştiriciyi, normalde MSAL.NET veya Microsoft kimlik platformu ile kullanılan artımlı onayı kullanmak istemediğinizde kullanabilirsiniz. Daha fazla bilgi için bkz . Kullanıcının birkaç kaynak için onayını önceden alma.
İşte bir kod örneği:
var result = await app.AcquireTokenInteractive(scopesForCustomerApi)
.WithExtraScopeToConsent(scopesForVendorApi)
.ExecuteAsync();
Diğer isteğe bağlı parametreler
için diğer isteğe bağlı parametreler hakkında bilgi edinmek için AcquireTokenInteractive
AcquireTokenInteractiveParameterBuilder başvuru belgelerine bakın.
Protokol aracılığıyla belirteçleri edinme
Belirteçleri almak için protokolü doğrudan kullanmanızı önermeyiz. Bunu yaparsanız uygulama çoklu oturum açma (SSO), cihaz yönetimi ve Koşullu Erişim içeren bazı senaryoları desteklemez.
Mobil uygulamalara yönelik belirteçleri almak için protokolü kullandığınızda iki istekte bulunabilirsiniz:
- Yetkilendirme kodu alın.
- Kod karşılığında bir jeton alın.
Yetkilendirme kodu alma
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=<CLIENT_ID>
&response_type=code
&redirect_uri=<ENCODED_REDIRECT_URI>
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2F.default
&state=12345
Erişim sağla ve belirteci yenile
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=<CLIENT_ID>
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=<ENCODED_REDIRECT_URI>
&grant_type=authorization_code
Sonraki adımlar
Aşağıdaki çok bölümlü öğretici serisinde kullanıcılara oturum açmanızı sağlayan bir React Tek sayfalı uygulama (SPA) oluşturarak daha fazla bilgi edinin.
Microsoft kimlik platformu mobil kod örneklerini keşfetme