Aracılığıyla paylaş


Azure AD B2C kullanarak kendi iOS Swift uygulamanızda kimlik doğrulamasını etkinleştirme

Bu makalede, kendi iOS Swift mobil uygulamanıza Azure Active Directory B2C (Azure AD B2C) kimlik doğrulamasını nasıl ekleyeceğiniz gösterilir. iOS Swift uygulamasını iOS için Microsoft Authentication Library (MSAL) ile tümleştirmeyi öğrenin.

Örnek iOS Swift uygulamasını kendi iOS Swift uygulamanızla değiştirerek örnek bir iOS Swift uygulamasında kimlik doğrulamasını yapılandırma ile bu makaleyi kullanın. Bu makaledeki yönergeleri tamamladıktan sonra uygulamanız Azure AD B2C aracılığıyla oturum açmaları kabul eder.

Önkoşullar

Azure AD B2C kullanarak örnek bir iOS Swift uygulamasında kimlik doğrulamasını yapılandırma bölümündeki önkoşulları ve tümleştirme yönergelerini gözden geçirin.

iOS Swift uygulama projesi oluşturma

Henüz bir iOS Swift uygulamanız yoksa, aşağıdaki adımları uygulayarak yeni bir proje ayarlayın:

  1. Xcode'ı açın ve ardından Dosya>Yeni Proje'yi> seçin.
  2. iOS uygulamaları için iOS>Uygulaması'nı ve ardından İleri'yi seçin.
  3. Yeni projeniz için seçenekleri belirleyin için aşağıdakileri sağlayın:
    1. Ürün adı, örneğin MSALiOS.
    2. Kuruluş tanımlayıcısı, örneğin contoso.com.
    3. Arabirim için Görsel Taslak'ı seçin.
    4. Yaşam döngüsü için UIKit Uygulama Temsilcisi'ni seçin.
    5. Dil için Swift'i seçin.
  4. İleri’yi seçin.
  5. Uygulamanızın oluşturulacağı klasörü seçin ve ardından Oluştur'u seçin.

1. Adım: MSAL kitaplığını yükleme

  1. MSAL kitaplığını yüklemek için CocoaPods'u kullanın. Projenizin .xcodeproj dosyasıyla aynı klasörde podfile dosyası yoksa boş bir dosya oluşturun ve podfile olarak adlandırın. Podfile dosyasına aşağıdaki kodu ekleyin:

    use_frameworks!
    
    target '<your-target-here>' do
       pod 'MSAL'
    end
    
  2. değerini <your-target-here> projenizin adıyla değiştirin (örneğin, MSALiOS). Daha fazla bilgi için bkz. Podfile Sözdizimi Başvurusu.

  3. Terminal penceresinde podfile dosyasını içeren klasöre gidin ve MSAL kitaplığını yüklemek için pod yüklemesini çalıştırın.

  4. Komutu çalıştırdıktan pod install sonra proje< adı.xcworkspace> dosyanız oluşturulur. Projeyi Xcode'da yeniden yüklemek için Xcode'ı kapatın ve projenizin name.xcworkspace> dosyasını açın<.

2. Adım: Uygulama URL'si düzenini ayarlama

Kullanıcılar kimlik doğrulaması yaparken Azure AD B2C, Azure AD B2C uygulama kaydında yapılandırılan yeniden yönlendirme URI'sini kullanarak uygulamaya bir yetkilendirme kodu gönderir.

MSAL varsayılan yeniden yönlendirme URI biçimi şeklindedir msauth.[Your_Bundle_Id]://auth. Örnek olarak msauth.com.microsoft.identitysample.MSALiOS://authURL şemasının bulunduğu msauth.com.microsoft.identitysample.MSALiOS yer verilmiştir.

Bu adımda, dizisini CFBundleURLSchemes kullanarak URL düzeninizi kaydedin. Uygulamanız, Azure AD B2C'den geri çağırma için URL şemasını dinler.

Xcode'da Info.plist dosyasını kaynak kod dosyası olarak açın. <dict> bölümünde aşağıdaki XML parçacığını ekleyin:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>msauth.com.microsoft.identitysample.MSALiOS</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>msauthv2</string>
    <string>msauthv3</string>
</array>

3. Adım: Kimlik doğrulama kodunu ekleme

Örnek kod bir UIViewController sınıftan oluşur. Sınıfı:

  • Kullanıcı arabiriminin yapısını tanımlar.
  • Azure AD B2C kimlik sağlayıcınız hakkında bilgi içerir. Uygulama, Azure AD B2C ile güven ilişkisi kurmak için bu bilgileri kullanır.
  • Kullanıcıların kimliğini doğrulamak, belirteçleri almak ve doğrulamak için kimlik doğrulama kodunu içerir.

Kullanıcıların kimlik doğrulaması yaptığı yeri UIViewController seçin. içinde UIViewController, kodu GitHub'da sağlanan kodla birleştirin.

4. Adım: iOS Swift uygulamanızı yapılandırma

Kimlik doğrulama kodunu ekledikten sonra iOS Swift uygulamanızı Azure AD B2C ayarlarınız ile yapılandırın. Azure AD B2C kimlik sağlayıcısı ayarları, önceki bölümde seçilen sınıfta yapılandırılırUIViewController.

iOS Swift uygulamanızı yapılandırmayı öğrenmek için bkz. Azure AD B2C kullanarak örnek bir iOS Swift uygulamasında kimlik doğrulamasını yapılandırma.

5. Adım: Mobil uygulamayı çalıştırma ve test etme

  1. Projeyi bağlı bir iOS cihazının simülatörüyle derleyin ve çalıştırın.
  2. Oturum Aç'ı seçin ve Azure AD B2C yerel veya sosyal hesabınızla kaydolun veya oturum açın.
  3. Kimlik doğrulaması başarıyla tamamlandıktan sonra görünen adınızı gezinti çubuğunda görürsünüz.

6. Adım: Kod yapı taşlarınızı özelleştirme

Bu bölümde, iOS Swift uygulamanız için kimlik doğrulamasını etkinleştiren kod yapı taşları açıklanmaktadır. UIViewController'ın yöntemlerini listeler ve kodunuzun nasıl özelleştirileceği açıklanır.

6.1. Adım: Genel istemci uygulamasının örneğini oluşturma

Ortak istemci uygulamalarının uygulama gizli dizilerini güvenli bir şekilde saklamasına güvenilmez ve istemci gizli dizileri yoktur. viewDidLoad'ta genel istemci uygulama nesnesi kullanarak bir MSAL örneği oluşturun.

Aşağıdaki Swift kod parçacığı, MSAL'yi bir MSALPublicClientApplicationConfig yapılandırma nesnesiyle nasıl başlatacaklarını gösterir.

Yapılandırma nesnesi, Azure AD B2C ortamınız hakkında bilgi sağlar. Örneğin, Azure AD B2C'ye kimlik doğrulama istekleri oluşturmak için istemci kimliğini, yeniden yönlendirme URI'sini ve yetkiliyi sağlar. Yapılandırma nesnesi hakkında bilgi için bkz. Örnek mobil uygulamayı yapılandırma.

do {

    let signinPolicyAuthority = try self.getAuthority(forPolicy: self.kSignupOrSigninPolicy)
    let editProfileAuthority = try self.getAuthority(forPolicy: self.kEditProfilePolicy)
    
    let pcaConfig = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: kRedirectUri, authority: signinPolicyAuthority)
    pcaConfig.knownAuthorities = [signinPolicyAuthority, editProfileAuthority]
    
    self.applicationContext = try MSALPublicClientApplication(configuration: pcaConfig)
    self.initWebViewParams()
    
    } catch {
        self.updateLoggingText(text: "Unable to create application \(error)")
    }

initWebViewParams yöntemi etkileşimli kimlik doğrulama deneyimini yapılandırıyor.

Aşağıdaki Swift kod parçacığı, sınıf üyesini webViewParameters sistem web görünümüyle başlatır. Daha fazla bilgi için bkz. iOS/macOS için tarayıcıları ve WebView'ları özelleştirme.

func initWebViewParams() {
    self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
    self.webViewParameters?.webviewType = .default
}

6.2. Adım: Etkileşimli yetkilendirme isteği başlatma

Etkileşimli yetkilendirme isteği, kullanıcıların sistem web görünümünü kullanarak kaydolmaları veya oturum açmaları istendiği bir akıştır. Kullanıcılar Oturum Aç düğmesini authorizationButton seçtiğinde yöntemi çağrılır.

yöntemi, authorizationButton nesneyi yetkilendirme isteğiyle ilgili verilerle hazırlar MSALInteractiveTokenParameters . yöntemi, acquireToken sistem web görünümü aracılığıyla kullanıcıların kimliğini doğrulamak için öğesini kullanır MSALInteractiveTokenParameters .

Aşağıdaki kod parçacığında etkileşimli yetkilendirme isteğinin nasıl başlatılası gösterilmektedir:

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority

applicationContext.acquireToken(with: parameters) { (result, error) in

// On error code    
guard let result = result else {
    self.updateLoggingText(text: "Could not acquire token: \(error ?? "No error information" as! Error)")
    return
}

// On success code
self.accessToken = result.accessToken
self.updateLoggingText(text: "Access token is \(self.accessToken ?? "Empty")")
}

Kullanıcılar yetkilendirme akışını başarıyla veya başarısız bir şekilde tamamladıktan sonra, sonuç yöntemin kapatılmasınaacquireToken döndürülür.

acquireToken yöntemi ve error nesnelerini döndürürresult. Bu kapatmayı kullanarak:

  • Kimlik doğrulaması tamamlandıktan sonra mobil uygulama kullanıcı arabirimini bilgilerle güncelleştirin.
  • Erişim belirteci ile bir web API hizmetini çağırın.
  • Kimlik doğrulama hatalarını işleyin (örneğin, bir kullanıcı oturum açma akışını iptal ettiğinde).

6.3. Adım: Web API'si çağırma

Belirteç tabanlı yetkilendirme web API'sini çağırmak için uygulamanın geçerli bir erişim belirteci olması gerekir. Uygulama aşağıdakileri yapar:

  1. Web API uç noktası için gerekli izinlere (kapsamlara) sahip bir erişim belirteci alır.
  2. Şu biçimi kullanarak erişim belirtecini HTTP isteğinin yetkilendirme üst bilgisinde taşıyıcı belirteç olarak geçirir:
Authorization: Bearer <access-token>

Kullanıcılar etkileşimli olarak kimlik doğrulaması yaparken, uygulama kapanışta acquireToken bir erişim belirteci alır. Sonraki web API çağrıları için, bu bölümde açıklandığı gibi alma belirteci sessiz (acquireTokenSilent) yöntemini kullanın.

acquireTokenSilent yöntemi aşağıdaki eylemleri gerçekleştirir:

  1. Belirteç önbelleğinden istenen kapsamlara sahip bir erişim belirteci getirmeye çalışır. Belirteç mevcutsa ve süresi dolmadıysa, belirteç döndürülür.
  2. Belirteç önbelleğinde yoksa veya süresi dolduysa, MSAL kitaplığı yeni bir erişim belirteci almak için yenileme belirtecini kullanmayı dener.
  3. Yenileme belirteci yoksa veya süresi dolduysa, bir özel durum döndürülür. Bu durumda, kullanıcıdan etkileşimli olarak oturum açmasını istemeniz gerekir.

Aşağıdaki kod parçacığı, erişim belirtecinin nasıl alınduğunu gösterir:

do {

// Get the authority using the sign-in or sign-up user flow
let authority = try self.getAuthority(forPolicy: self.kSignupOrSigninPolicy)

// Get the current account from the application context
guard let thisAccount = try self.getAccountByPolicy(withAccounts: applicationContext.allAccounts(), policy: kSignupOrSigninPolicy) else {
    self.updateLoggingText(text: "There is no account available!")
    return
}

// Configure the acquire token silent parameters
let parameters = MSALSilentTokenParameters(scopes: kScopes, account:thisAccount)
parameters.authority = authority
parameters.loginHint = "username"

// Acquire token silent
self.applicationContext.acquireTokenSilent(with: parameters) { (result, error) in
    if let error = error {
        
        let nsError = error as NSError
        
        // interactionRequired means we need to ask the user to sign in. This usually happens
        // when the user's Refresh Token is expired or if the user has changed their password
        // among other possible reasons.
        
        if (nsError.domain == MSALErrorDomain) {
            
            if (nsError.code == MSALError.interactionRequired.rawValue) {
                
                // Start an interactive authorization code
                // Notice we supply the account here. This ensures we acquire token for the same account
                // as we originally authenticated.
                
                ...
            }
        }
        
        self.updateLoggingText(text: "Could not acquire token: \(error)")
        return
    }
    
    guard let result = result else {
        
        self.updateLoggingText(text: "Could not acquire token: No result returned")
        return
    }
    
    // On success, set the access token to the accessToken class member. 
    // The callGraphAPI method uses the access token to call a web API  
    self.accessToken = result.accessToken
    ...
}
} catch {
self.updateLoggingText(text: "Unable to construct parameters before calling acquire token \(error)")
}

callGraphAPI yöntemi burada gösterildiği gibi erişim belirtecini alır ve web API'sini çağırır:

@objc func callGraphAPI(_ sender: UIButton) {
    guard let accessToken = self.accessToken else {
        self.updateLoggingText(text: "Operation failed because could not find an access token!")
        return
    }
    
    let sessionConfig = URLSessionConfiguration.default
    sessionConfig.timeoutIntervalForRequest = 30
    let url = URL(string: self.kGraphURI)
    var request = URLRequest(url: url!)
    request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
    let urlSession = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: OperationQueue.main)
    
    self.updateLoggingText(text: "Calling the API....")
    
    urlSession.dataTask(with: request) { data, response, error in
        guard let validData = data else {
            self.updateLoggingText(text: "Could not call API: \(error ?? "No error information" as! Error)")
            return
        }
        
        let result = try? JSONSerialization.jsonObject(with: validData, options: [])
        
        guard let validResult = result as? [String: Any] else {
            self.updateLoggingText(text: "Nothing returned from API")
            return
        }
        
        self.updateLoggingText(text: "API response: \(validResult.debugDescription)")
        }.resume()
}

6.4. Adım: Kullanıcıların oturumunu kapatma

MSAL ile oturum kapatarak kullanıcılar hakkında bilinen tüm bilgiler uygulamadan kaldırılır. Kullanıcıların oturumunu kapatmak ve kullanıcı arabirimini güncelleştirmek için oturum kapatma yöntemini kullanın. Örneğin, korumalı kullanıcı arabirimi öğelerini gizleyebilir, oturum kapatma düğmesini gizleyebilir veya oturum açma düğmesini gösterebilirsiniz.

Aşağıdaki kod parçacığında kullanıcıların nasıl oturumunu kapatacakları gösterilmektedir:

@objc func signoutButton(_ sender: UIButton) {
do {
    
    
    let thisAccount = try self.getAccountByPolicy(withAccounts: applicationContext.allAccounts(), policy: kSignupOrSigninPolicy)
    
    if let accountToRemove = thisAccount {
        try applicationContext.remove(accountToRemove)
    } else {
        self.updateLoggingText(text: "There is no account to signing out!")
    }
    
    ...
    
} catch  {
    self.updateLoggingText(text: "Received error signing out: \(error)")
}
}

Sonraki adımlar

Şunları nasıl yapacağınızı öğrenin: