Web kimlik doğrulayıcısı

Browse sample. Örneğe göz atın

Bu makalede arabiriminde .NET Çok Platformlu Uygulama Kullanıcı Arabirimini (.NET MAUI) IWebAuthenticator nasıl kullanabileceğiniz açıklanmaktadır. Bu arabirim, uygulamaya kayıtlı belirli bir URL'ye geri çağırmayı dinleyen tarayıcı tabanlı kimlik doğrulama akışlarını başlatmanıza olanak tanır.

Arabirimin IWebAuthenticator varsayılan uygulaması özelliği aracılığıyla WebAuthenticator.Default kullanılabilir. IWebAuthenticator Hem arabirim hem WebAuthenticator de sınıf ad alanında Microsoft.Maui.Authentication yer alır.

Genel Bakış

Birçok uygulama için kullanıcı kimlik doğrulaması eklenmesi gerekir ve bu genellikle kullanıcılarınızın mevcut Microsoft, Facebook, Google veya Apple Oturum Açma hesaplarında oturum açmasını sağlamak anlamına gelir.

Bahşiş

Microsoft Authentication Library (MSAL), uygulamanıza kimlik doğrulaması eklemek için mükemmel bir anahtar teslim çözümü sağlar.

Kimlik doğrulaması için kendi web hizmetinizi kullanmak istiyorsanız istemci tarafı işlevselliğini uygulamak için kullanabilirsiniz WebAuthenticator .

Sunucu arka ucu neden kullanılır?

Birçok kimlik doğrulama sağlayıcısı, daha iyi güvenlik sağlamak için yalnızca açık veya iki ayaklı kimlik doğrulama akışları sunmaya geçti. Bu, kimlik doğrulama akışını tamamlamak için sağlayıcıdan bir istemci gizli dizisine ihtiyacınız olduğu anlamına gelir. Ne yazık ki, mobil uygulamalar gizli dizileri depolamak için harika bir yer değildir ve mobil uygulamanın kodunda, ikili dosyalarında veya başka bir şekilde depolanan her şey güvenli değildir.

Burada en iyi yöntem, mobil uygulamanızla kimlik doğrulama sağlayıcısı arasında orta katman olarak bir web arka ucu kullanmaktır.

Önemli

İstemci gizli dizilerini depolamaya yönelik güvenlik eksikliği nedeniyle kimlik doğrulama akışında bir web arka ucu kullanmayan eski yalnızca mobil kimlik doğrulama kitaplıklarının ve desenlerinin kullanılmasını kesinlikle öneririz.

Başlarken

İşlevlere WebAuthenticator erişmek için aşağıdaki platforma özgü kurulum gereklidir.

Android, geri çağırma URI'nizi işlemek için bir Amaç Filtresi kurulumu gerektirir. Bu, sınıfından WebAuthenticatorCallbackActivity devralınarak gerçekleştirilir:

using Android.App;
using Android.Content.PM;

namespace YourNameSpace;

[Activity(NoHistory = true, LaunchMode = LaunchMode.SingleTop, Exported = true)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
              Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
              DataScheme = CALLBACK_SCHEME)]
public class WebAuthenticationCallbackActivity : Microsoft.Maui.Authentication.WebAuthenticatorCallbackActivity
{
    const string CALLBACK_SCHEME = "myapp";

}

Projenizin Hedef Android sürümü Android 11 (R API 30) veya üzeri olarak ayarlandıysa, Android Bildiriminizi Android'in paket görünürlük gereksinimlerini kullanan sorgularla güncelleştirmeniz gerekir.

Platforms/Android/AndroidManifest.xml dosyasında düğüme aşağıdaki queries/intent düğümleri manifest ekleyin:

<queries>
  <intent>
    <action android:name="android.support.customtabs.action.CustomTabsService" />
  </intent>
</queries>

WebAuthenticator kullanma

API temelde iki parametre alan tek bir yöntemden AuthenticateAsyncoluşur:

  1. Web tarayıcısı akışını başlatmak için kullanılan URL.
  2. Akışın sonunda uygulamasına kayıtlı olan URI'yi geri çağırması beklenir.

Sonuç, geri çağırma URI'sinden ayrıştırılan tüm sorgu parametrelerini içeren bir 'WebAuthenticatorResult'dir:

try
{
    WebAuthenticatorResult authResult = await WebAuthenticator.Default.AuthenticateAsync(
        new Uri("https://mysite.com/mobileauth/Microsoft"),
        new Uri("myapp://"));

    string accessToken = authResult?.AccessToken;

    // Do something with the token
}
catch (TaskCanceledException e)
{
    // Use stopped auth
}

API, WebAuthenticator url'yi tarayıcıda başlatmayı ve geri çağırma alınana kadar beklemeyi üstlenir:

Typical web authentication flow.

Kullanıcı herhangi bir noktada akışı iptal ederse, bir TaskCanceledException oluşturulur.

Özel kimlik doğrulama oturumu

iOS 13, geliştiricilerin kimlik doğrulama oturumunu özel olarak başlatması için kısa ömürlü bir web tarayıcısı API'sini kullanıma sundu. Bu, geliştiricilerin kimlik doğrulama oturumları arasında hiçbir paylaşılan tanımlama bilgisi veya göz atma verisi bulunmadığını ve her seferinde yeni bir oturum açma oturumu olmasını istemesine olanak tanır. Bu, yöntemine WebAuthenticatorOptionsAuthenticateAsync geçirilen parametre aracılığıyla kullanılabilir:

try
{
    WebAuthenticatorResult authResult = await WebAuthenticator.Default.AuthenticateAsync(
        new WebAuthenticatorOptions()
        {
            Url = new Uri("https://mysite.com/mobileauth/Microsoft"),
            CallbackUrl = new Uri("myapp://"),
            PrefersEphemeralWebBrowserSession = true
        });

    string accessToken = authResult?.AccessToken;

    // Do something with the token
}
catch (TaskCanceledException e)
{
    // Use stopped auth
}

Platform farklılıkları

Bu bölümde web kimlik doğrulaması API'siyle platforma özgü farklılıklar açıklanmaktadır.

Özel Sekmeler kullanılabilir olduğunda kullanılır, aksi takdirde sistem tarayıcısı geri dönüş olarak kullanılır.

Apple Oturum Açma

Apple'ın inceleme yönergelerine göre, Apple uygulamanız kimlik doğrulaması için herhangi bir sosyal oturum açma hizmeti kullanıyorsa, apple oturum açma seçeneğini de sunmalıdır. Uygulamalarınıza Apple Oturum Açma'yı eklemek için uygulamanıza Apple ile oturum açma yetkilendirmesini eklemeniz gerekir. Bu yetkilendirme türündeki com.apple.developer.applesigninArrayStringanahtar kullanılarak tanımlanır:

<key>com.apple.developer.applesignin</key>
<array>
  <string>Default</string>
</array>

Daha fazla bilgi için bkz . developer.apple.com'da Apple Yetkilendirmesi ile oturum açma.

iOS 13 ve üzeri için yöntemini çağırın AppleSignInAuthenticator.AuthenticateAsync . Bu, kullanıcılarınızın bu cihazlarda mümkün olan en iyi deneyimi elde edebilmesi için yerel Apple Oturum Açma API'lerini kullanır. Örneğin, çalışma zamanında doğru API'yi kullanmak için paylaşılan kodunuzu yazabilirsiniz:

var scheme = "..."; // Apple, Microsoft, Google, Facebook, etc.
var authUrlRoot = "https://mysite.com/mobileauth/";
WebAuthenticatorResult result = null;

if (scheme.Equals("Apple")
    && DeviceInfo.Platform == DevicePlatform.iOS
    && DeviceInfo.Version.Major >= 13)
{
    // Use Native Apple Sign In API's
    result = await AppleSignInAuthenticator.AuthenticateAsync();
}
else
{
    // Web Authentication flow
    var authUrl = new Uri($"{authUrlRoot}{scheme}");
    var callbackUrl = new Uri("myapp://");

    result = await WebAuthenticator.Default.AuthenticateAsync(authUrl, callbackUrl);
}

var authToken = string.Empty;

if (result.Properties.TryGetValue("name", out string name) && !string.IsNullOrEmpty(name))
    authToken += $"Name: {name}{Environment.NewLine}";

if (result.Properties.TryGetValue("email", out string email) && !string.IsNullOrEmpty(email))
    authToken += $"Email: {email}{Environment.NewLine}";

// Note that Apple Sign In has an IdToken and not an AccessToken
authToken += result?.AccessToken ?? result?.IdToken;

Bahşiş

iOS 13 olmayan cihazlarda bu, Android ve Windows cihazlarınızda Apple Oturum Açma'yı etkinleştirmek için de kullanılabilen web kimlik doğrulama akışını başlatır. Apple Oturum Açma'yi test etmek için iOS simülatörünüzde iCloud hesabınızda oturum açabilirsiniz.

ASP.NET çekirdek sunucu arka ucu

API'yi herhangi bir web arka uç hizmetiyle kullanmak WebAuthenticator mümkündür. Bunu ASP.NET temel bir uygulamayla kullanmak için web uygulamasını aşağıdaki adımlarla yapılandırın:

  1. ASP.NET Core web uygulamasında dış sosyal kimlik doğrulama sağlayıcılarınızı ayarlayın.
  2. Aramanızda .AddAuthentication() Varsayılan Kimlik Doğrulama Düzenini olarak CookieAuthenticationDefaults.AuthenticationScheme ayarlayın.
  3. Startup.cs.AddAuthentication() çağrınızda kullanın.AddCookie().
  4. Tüm sağlayıcılar ile .SaveTokens = true;yapılandırılmalıdır.
services.AddAuthentication(o =>
    {
        o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddFacebook(fb =>
    {
        fb.AppId = Configuration["FacebookAppId"];
        fb.AppSecret = Configuration["FacebookAppSecret"];
        fb.SaveTokens = true;
    });

Bahşiş

Apple Oturum Açma'yı eklemek isterseniz NuGet paketini kullanabilirsiniz AspNet.Security.OAuth.Apple . Startup.cs örneğinin tamamını görüntüleyebilirsiniz.

Özel mobil kimlik doğrulama denetleyicisi ekleme

Mobil kimlik doğrulama akışıyla akışı genellikle doğrudan kullanıcının seçtiği bir sağlayıcıya başlatırsınız. Örneğin, uygulamanın oturum açma ekranında bir "Microsoft" düğmesine tıklama. Kimlik doğrulama akışını sonlandırmak için belirli bir geri çağırma URI'sinde ilgili bilgileri uygulamanıza döndürmek de önemlidir.

Bunu başarmak için özel bir API Denetleyicisi kullanın:

[Route("mobileauth")]
[ApiController]
public class AuthController : ControllerBase
{
    const string callbackScheme = "myapp";

    [HttpGet("{scheme}")] // eg: Microsoft, Facebook, Apple, etc
    public async Task Get([FromRoute]string scheme)
    {
        // 1. Initiate authentication flow with the scheme (provider)
        // 2. When the provider calls back to this URL
        //    a. Parse out the result
        //    b. Build the app callback URL
        //    c. Redirect back to the app
    }
}

Bu denetleyicinin amacı, uygulamanın istediği şemayı (sağlayıcı) çıkarsamak ve sosyal sağlayıcıyla kimlik doğrulama akışını başlatmaktır. Sağlayıcı web arka ucuna geri çağırdığında denetleyici sonucu ayrıştırıp parametrelerle uygulamanın geri çağırma URI'sine yönlendirir.

Bazen sağlayıcının access_token uygulamaya geri dönmesi gibi verileri döndürmek isteyebilirsiniz. Bunu geri çağırma URI'sinin sorgu parametreleri aracılığıyla yapabilirsiniz. Alternatif olarak, bunun yerine sunucunuzda kendi kimliğinizi oluşturmak ve kendi belirtecinizi uygulamaya geri geçirmek isteyebilirsiniz. Bu bölümü ne ve nasıl yapacağın sana bağlı!

Tam denetleyici örneğine göz atın.

Dekont

Yukarıdaki örnekte, 3. taraf kimlik doğrulaması (yani OAuth) sağlayıcısından erişim belirtecinin nasıl döndürüleceği gösterilmektedir. Web isteklerini web arka ucuna yetkilendirmek için kullanabileceğiniz bir belirteç elde etmek için, web uygulamanızda kendi belirtecinizi oluşturmanız ve bunun yerine bunu döndürmeniz gerekir. ASP.NET Core kimlik doğrulamasına genel bakış, ASP.NET Core'daki gelişmiş kimlik doğrulama senaryoları hakkında daha fazla bilgi sağlar.