Aracılığıyla paylaş


Web kimlik doğrulama aracısı

Bu makalede, Evrensel Windows Platformu (UWP) uygulamanızı OpenID veya OAuth gibi kimlik doğrulama protokollerini kullanan bir çevrimiçi kimlik sağlayıcısına nasıl bağlayacağınız açıklanmaktadır. AuthenticateAsync yöntemi, çevrimiçi kimlik sağlayıcısına bir istek gönderir ve uygulamanın erişimi olan sağlayıcı kaynaklarını açıklayan bir erişim belirtecini geri alır.

Uyarı

Eksiksiz ve çalışan bir kod örneği için GitHubüzerinde WebAuthenticationBroker deposunu kopyalayın.

 

Uygulamanızı çevrimiçi sağlayıcınıza kaydetme

Uygulamanızı bağlanmak istediğiniz çevrimiçi kimlik sağlayıcısına kaydetmeniz gerekir. Uygulamanızı kimlik sağlayıcısından nasıl kaydedebileceğinizi öğrenebilirsiniz. Kaydoldıktan sonra, çevrimiçi sağlayıcı genellikle uygulamanız için bir kimlik veya gizli anahtar verir.

Kimlik doğrulama isteği URI'sini oluşturma

İstek URI'si, kimlik doğrulama isteğini çevrimiçi sağlayıcınıza ekli olarak uygulama kimliği veya gizli dizi, kullanıcının kimlik doğrulaması tamamlandıktan sonra gönderildiği yeniden yönlendirme URI'si ve beklenen yanıt türü gibi diğer gerekli bilgilerle birlikte gönderdiğiniz adresten oluşur. Sağlayıcınızdan hangi parametrelerin gerekli olduğunu öğrenebilirsiniz.

İstek URI'si, AuthenticateAsync yönteminin requestUri parametresi olarak gönderilir. Güvenli bir adres olmalıdır (https://ile başlamalıdır)

Aşağıdaki örnek, istek URI'sinin nasıl der yapılacağını gösterir.

string startURL = "https://<providerendpoint>?client_id=<clientid>&scope=<scopes>&response_type=token";
string endURL = "http://<appendpoint>";

System.Uri startURI = new System.Uri(startURL);
System.Uri endURI = new System.Uri(endURL);

Çevrimiçi sağlayıcıya bağlanma

Çevrimiçi kimlik sağlayıcısına bağlanmak ve erişim belirteci almak için AuthenticateAsync yöntemini çağırırsınız. Yöntem, önceki adımda oluşturulan URI'yi requestUri parametresi olarak ve kullanıcının yeniden yönlendirilmesini istediğiniz URI'yi callbackUri parametresi olarak alır.

string result;

try
{
    var webAuthenticationResult = 
        await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync( 
        Windows.Security.Authentication.Web.WebAuthenticationOptions.None, 
        startURI, 
        endURI);

    switch (webAuthenticationResult.ResponseStatus)
    {
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
            // Successful authentication. 
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
            // HTTP error. 
            result = webAuthenticationResult.ResponseErrorDetail.ToString(); 
            break;
        default:
            // Other error.
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
    } 
}
catch (Exception ex)
{
    // Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here. 
    result = ex.Message;
}

Uyarı

AuthenticateAsyncek olarak, Windows.Security.Authentication.Web ad alanı bir AuthenticateAndContinue yöntemi içerir. Bu yöntemi çağırmayın. Yalnızca Windows Phone 8.1'i hedefleyen uygulamalar için tasarlanmıştır ve Windows 10'dan itibaren kullanım dışıdır.

Çoklu oturum açma (SSO) ile bağlanma.

Varsayılan olarak, Web kimlik doğrulama aracısı tanımlama bilgilerinin kalıcı olmasını sağlamaz. Bu nedenle, uygulama kullanıcısı oturumunun açık kalmasını istediğini belirtse bile (örneğin, sağlayıcının oturum açma iletişim kutusunda bir onay kutusu seçerek), söz konusu sağlayıcının kaynaklarına her erişmek istediğinde oturum açması gerekir. SSO ile oturum açmak için, çevrimiçi kimlik sağlayıcınızın Web kimlik doğrulama aracısı için SSO'nun etkinleştirilmiş olması ve uygulamanızın callbackUri parametresi almayan AuthenticateAsync aşırı yüklemesini çağırması gerekir. Bu, kalıcı tanımlama bilgilerinin web kimlik doğrulama aracısı tarafından depolanmasına izin verir, böylece aynı uygulama tarafından yapılan gelecekteki kimlik doğrulama çağrıları kullanıcı tarafından yinelenen oturum açmayı gerektirmez (erişim belirteci süresi dolana kadar kullanıcı etkin bir şekilde "oturum açar").

SSO'yı desteklemek için, çevrimiçi sağlayıcının ms-app://<appSID>biçiminde bir yeniden yönlendirme URI'sini kaydetmenize izin vermesi gerekir. Burada, <appSID> uygulamanızın SID değeridir. Uygulamanızın SID'sini uygulamanızın uygulama geliştirici sayfasından veya GetCurrentApplicationCallbackUri yöntemini çağırarak bulabilirsiniz.

string result;

try
{
    var webAuthenticationResult = 
        await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync( 
        Windows.Security.Authentication.Web.WebAuthenticationOptions.None, 
        startURI);

    switch (webAuthenticationResult.ResponseStatus)
    {
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
            // Successful authentication. 
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
            // HTTP error. 
            result = webAuthenticationResult.ResponseErrorDetail.ToString(); 
            break;
        default:
            // Other error.
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
    } 
}
catch (Exception ex)
{
    // Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here. 
    result = ex.Message;
}

Hata ayıklama

İşlem günlüklerini gözden geçirme ve Fiddler kullanarak web isteklerini ve yanıtlarını gözden geçirme de dahil olmak üzere web kimlik doğrulama aracısı API'lerinde sorun gidermenin çeşitli yolları vardır.

İşlem günlükleri

Genellikle işlem günlüklerini kullanarak neyin çalışmadığını belirleyebilirsiniz. Web sitesi geliştiricilerinin web sayfalarının Web kimlik doğrulama aracısı tarafından nasıl işlendiğini anlamasına olanak tanıyan özel bir olay günlüğü kanalı Microsoft-Windows-WebAuth\Operational vardır. Etkinleştirmek için eventvwr.exe başlatın ve Application and Services\Microsoft\Windows\WebAuth altında İşlem günlüğünü etkinleştirin. Ayrıca Web kimlik doğrulama aracısı, kendisini web sunucusunda tanımlamak için kullanıcı aracısı dizesine benzersiz bir dize ekler. Dize "MSAuthHost/1.0" şeklindedir. Sürüm numarasının gelecekte değişebileceğini unutmayın, bu nedenle kodunuzda bu sürüm numarasına bağımlı olmamalıdır. Tam kullanıcı aracısı dizesinin ve ardından tam hata ayıklama adımlarının bir örneği aşağıda verilmiştir.

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MSAuthHost/1.0)

  1. İşlem günlüklerini etkinleştirin.
  2. Contoso sosyal uygulamasını çalıştırın. webauth işlem günlüklerini görüntüleyen olay görüntüleyicisi
  3. Oluşturulan günlük girdileri, Web kimlik doğrulama aracısının davranışını daha ayrıntılı anlamak için kullanılabilir. Bu durumda, bunlar şunları içerebilir:
    • Gezinme Başlangıcı: AuthHost başlatıldığında günlüğe kaydedilir ve başlangıç ve sonlandırma URL’leri hakkında bilgi içerir.
    • , gezinti başlangıcının ayrıntılarını gösterir
    • Gezinti Tamamlandı: Web sayfası yükleme işleminin tamamlanmasını günlüğe kaydeder.
    • Meta Etiketi: Ayrıntılarıyla birlikte bir meta etiketiyle karşılaşıldığında kaydını tutar.
    • Gezinti Sonlandırıldı: Gezinti kullanıcı tarafından sonlandırıldı.
    • Gezinti Hatası: AuthHost, HttpStatusCode dahil url'de bir gezinti hatasıyla karşılaşır.
    • Gezinti Sonu: Sonlandırıcı URL ile karşılaşıldı.

Kemancı

Fiddler web hata ayıklayıcısı uygulamalarla kullanılabilir. Daha fazla bilgi için Fiddler belgelerine bakın

  1. AuthHost kendi uygulama kapsayıcısında çalıştığından, özel ağ özelliği vermek için bir kayıt defteri anahtarı ayarlamanız gerekir: Windows Kayıt Defteri Düzenleyicisi Sürüm 5.00

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Görüntü Dosyası Yürütme Seçenekleri\authhost.exe\EnablePrivateNetwork = 00000001

    Bu kayıt defteri anahtarınız yoksa, yönetici ayrıcalıklarıyla komut isteminde oluşturabilirsiniz.

    REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe" /v EnablePrivateNetwork /t REG_DWORD /d 1 /f
    
  2. Giden trafiği oluşturan AuthHost için bir kural ekleyin.

    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
    D:\Windows\System32>CheckNetIsolation.exe LoopbackExempt -s
    List Loopback Exempted AppContainers
    [1] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
        SID:  S-1-15-2-1973105767-3975693666-32999980-3747492175-1074076486-3102532000-500629349
    [2] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
        SID:  S-1-15-2-166260-4150837609-3669066492-3071230600-3743290616-3683681078-2492089544
    [3] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.a.p_8wekyb3d8bbwe
        SID:  S-1-15-2-3506084497-1208594716-3384433646-2514033508-1838198150-1980605558-3480344935
    
  3. Fiddler'a gelen trafik için bir güvenlik duvarı kuralı ekleyin.

    Komut satırını veya Windows Defender Güvenlik Duvarı GUI'sini kullanarak güvenlik duvarı kuralı oluşturabilirsiniz:

    Seçenek A: netsh komutunu kullanma (yönetici olarak çalıştır):

    netsh advfirewall firewall add rule name="Fiddler for AuthHost Debugging" dir=in action=allow program="C:\Program Files\Fiddler\Fiddler.exe" enable=yes
    

    Fiddler farklı bir konuma yüklenmişse, yolu buna göre ayarlayın. Alternatif olarak, bağlantı noktası tabanlı bir kural oluşturabilirsiniz:

    netsh advfirewall firewall add rule name="Fiddler Port for AuthHost" dir=in action=allow protocol=TCP localport=8888
    

    Seçenek B: Gelişmiş Güvenlik ile Windows Defender Güvenlik Duvarı'nı kullanma:

    1. Gelişmiş Güvenlik özellikli Windows Defender Güvenlik Duvarı'nı açın (komutunu çalıştırın wf.msc)
    2. Sol bölmede "Gelen Kuralları" seçeneğine tıklayın
    3. "Yeni Kural..." seçeneğine tıklayın sağ bölmede
    4. "Program" öğesini seçin ve İleri'ye tıklayın
    5. Fiddler yürütülebilir dosyanıza göz atın (genellikle C:\Program Files\Fiddler\Fiddler.exe makine başına yüklemede) ve İleri'ye tıklayın
    6. "Bağlantıya izin ver" seçeneğini belirleyin ve İleri'ye tıklayın
    7. Tüm ağ türlerini (Etki Alanı, Özel, Genel) denetleyin ve İleri'ye tıklayın
    8. Kurala "AuthHost Hata Ayıklama için Fiddler" gibi bir ad verin ve Son'a tıklayın