Xamarin.Essentials: Web Authenticator
çekirdek sunucu arka ucu ASP.NET
WebAuthenticatorAPI 'yi herhangi bir Web arka uç hizmeti ile birlikte kullanmak mümkündür. ASP.NET çekirdek uygulamayla kullanmak için, önce aşağıdaki adımlarla web uygulamasını yapılandırmanız gerekir:
- istediğiniz dış sosyal kimlik doğrulama sağlayıcılarını bir ASP.NET Core web uygulamasında ayarlayın.
- Çağrın varsayılan kimlik doğrulaması şemasını olarak ayarlayın
CookieAuthenticationDefaults.AuthenticationScheme.AddAuthentication(). .AddCookie()Başlangıç. cs.AddAuthentication()çağrın içinde kullanın.- Tüm sağlayıcıların ile yapılandırılması gerekir
.SaveTokens = true;.
services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddFacebook(fb =>
{
fb.AppId = Configuration["FacebookAppId"];
fb.AppSecret = Configuration["FacebookAppSecret"];
fb.SaveTokens = true;
});
İpucu
Apple oturum açma 'yı eklemek istiyorsanız AspNet.Security.OAuth.Apple NuGet paketini kullanabilirsiniz. Essentials GitHub deposunda tam başlangıç. cs örneğini görüntüleyebilirsiniz.
Özel bir mobil kimlik doğrulama denetleyicisi ekleme
Bir mobil kimlik doğrulama akışıyla, genellikle akışı kullanıcının seçtiği bir sağlayıcıya (örn. uygulamanın oturum açma ekranında bir "Microsoft" düğmesine tıklayarak) başlatması tercih edilir. Kimlik doğrulama akışını sonlandırmak için belirli bir geri çağırma URI 'sindeki uygulamanıza ilgili bilgileri döndürebilmek 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 düzen (sağlayıcı) çıkarması ve sosyal sağlayıcıyla kimlik doğrulama akışını başlatmadır. Sağlayıcı Web arka ucuna geri aradığında, denetleyici sonucu ayrıştırır ve parametreleri ile uygulamanın geri çağırma URI 'sine yeniden yönlendirir.
Bazen, access_token geri çağırma URI 'sinin sorgu parametreleri aracılığıyla yapabileceğiniz, sağlayıcının uygulamaya geri dönüş gibi verileri döndürmek isteyebilirsiniz. Bunun yerine, kendi kimliğinizi sunucunuzda oluşturmak ve kendi belirtecinizi uygulamaya geri geçirmek isteyebilirsiniz. Bu bölümün ne olduğunu ve ne kadar güncel olduğunu öğrenin!
Essentials deposundaki tam denetleyici örneğine göz atın.
Not
Yukarıdaki örnek, 3. taraf kimlik doğrulaması (IE) sağlayıcısından erişim belirtecinin nasıl döndürüldiğini gösterir. Web arka ucunun kendisine Web isteklerini yetkilendirmek için kullanabileceğiniz bir belirteç almak için, Web uygulamanızda kendi belirtecinizi oluşturmanız ve bunun yerine dönebilmeniz gerekir. ASP.NET Core kimlik doğrulamasına genel bakış ASP.NET Core gelişmiş kimlik doğrulama senaryoları hakkında daha fazla bilgi içerir.
API
- /WebAuthenticator "Data-LinkType =" external ">WebAuthenticator kaynak kodu
- WebAuthenticator API belgeleri
- ASP.NET Core Server örneği
WebAuthenticator sınıfı, uygulamaya kayıtlı belırlı bir URL 'ye geri çağırma için dinleme sağlayan tarayıcı tabanlı akışlar başlatabilmenizi sağlar.
Genel Bakış
Birçok uygulama kullanıcı kimlik doğrulaması eklemeyi gerektirir ve bu genellikle kullanıcılarınızın mevcut Microsoft, Facebook, Google ve artık Apple oturum açma hesaplarında oturum açmasını sağlar.
Microsoft kimlik doğrulama kitaplığı (msal) , uygulamanıza kimlik doğrulaması eklemek için harika bir açılan anahtar çözümü sağlar. Xamarin uygulamaları için istemci NuGet paketinde bile destek vardır.
Kimlik doğrulaması için kendi Web hizmetinizi kullanmaya ilgileniyorsanız, istemci tarafı işlevselliğini uygulamak için WebAuthenticator kullanabilirsiniz.
Neden sunucu arka ucu kullanılmalıdır?
Birçok kimlik doğrulama sağlayıcısı, daha iyi güvenlik sağlamak için yalnızca açık veya iki düzeyli kimlik doğrulama akışları sunarak taşınmıştır. Bu, kimlik doğrulama akışını tamamlaması için sağlayıcıdan bir ' istemci gizli dizisi ' olması gereken anlamına gelir. Ne yazık ki mobil uygulamalar, bir mobil uygulamanın kodunda, ikili dosyalarında saklanan gizli dizileri ve herhangi bir şeyi depolamak için harika bir yer değildir.
Buradaki en iyi yöntem, mobil uygulamanız ve kimlik doğrulama sağlayıcısı arasında bir orta katman olarak bir Web arka ucu kullanmaktır.
Önemli
İstemci gizliliklerini depolamaya yönelik güvenlik eksikliğinden dolayı 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ı önemle öneririz.
başlarken
Bu API 'yi kullanmaya başlamak için, kitaplığın projelerinizde düzgün bir şekilde yüklendiğinden ve ayarlandığından emin olmak için Başlarken Kılavuzunu okuyun.
WebAuthenticator işlevselliğine 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, altsınıflama sınıfı tarafından kolayca gerçekleştirilir WebAuthenticatorCallbackActivity :
const string CALLBACK_SCHEME = "myapp";
[Activity(NoHistory = true, LaunchMode = LaunchMode.SingleTop)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
DataScheme = CALLBACK_SCHEME)]
public class WebAuthenticationCallbackActivity : Xamarin.Essentials.WebAuthenticatorCallbackActivity
{
}
Projenizin hedef Android sürümü, Android 11 (R API 30) olarak ayarlandıysa, Android bildiriminizi yeni paket görünürlük gereksinimleriylekullanılan sorgularla güncelleştirmeniz gerekir.
Özellikler klasörünün altında AndroidManifest.xml dosyasını açın ve bildirim düğümünün içine aşağıdakini ekleyin:
<queries>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
WebAuthenticator kullanma
Sınıfınıza bir başvuru ekleyin Xamarin.Essentials :
using Xamarin.Essentials;
API, genellikle iki parametre alan tek bir yöntemden oluşur AuthenticateAsync : Web tarayıcısı akışını başlatmak için kullanılması gereken URL ve Flow 'un sonunda geri çağırması ve uygulamanın işleyebilmesi için kaydolduğunuz URI.
Sonuç, WebAuthenticatorResult geri ÇAĞıRMA URI 'sinden ayrıştırılmış sorgu parametrelerini içerir:
var authResult = await WebAuthenticator.AuthenticateAsync(
new Uri("https://mysite.com/mobileauth/Microsoft"),
new Uri("myapp://"));
var accessToken = authResult?.AccessToken;
WebAuthenticatorAPI, tarayıcıda URL 'yi başlatmayı ve geri çağırma işlemi tamamlanana kadar beklemeyi üstlenir:

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 'SI sunmuştur. Bu, geliştiricilerin kimlik doğrulama oturumları arasında hiçbir paylaşılan tanımlama bilgisi veya gözatma verisi yoksa, her seferinde yeni bir oturum açma oturumu olacağını talep etmesini sağlar. Bu, WebAuthenticatorOptions iOS için 1,7 ' de tanıtılan yeni ile kullanılabilir Xamarin.Essentials .
var url = new Uri("https://mysite.com/mobileauth/Microsoft");
var callbackUrl = new Uri("myapp://")
var authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
{
Url = url,
CallbackUrl = callbackUrl,
PrefersEphemeralWebBrowserSession = true
});
Platform farkları
Özel sekmeler kullanılabilir olduğunda kullanılır, aksi takdirde URL için bir amaç başlatılır.
Apple oturum açma
Apple 'ın gözden geçirme yönergelerinegöre, uygulamanız kimlik doğrulaması için herhangi bir sosyal oturum açma hizmeti kullanıyorsa, Apple oturum açma seçeneğini de bir seçenek olarak sunmalıdır.
Uygulamalarınıza Apple oturum açma eklemek için öncelikle uygulamanızı Apple oturum açma kullanacak şekilde yapılandırmanızgerekir.
İOS 13 ve üzeri için yöntemini çağırmak isteyeceksiniz AppleSignInAuthenticator.AuthenticateAsync() . Bu, kullanıcılarınızın bu cihazlarda mümkün olan en iyi deneyimi elde etmek için, yerleşik olarak bulunan yerel Apple oturum açma API 'sini kullanır. Çalışma zamanında doğru API 'yi kullanmak için, paylaşılan kodunuzu şöyle yazabilirsiniz:
var scheme = "..."; // Apple, Microsoft, Google, Facebook, etc.
WebAuthenticatorResult r = null;
if (scheme.Equals("Apple")
&& DeviceInfo.Platform == DevicePlatform.iOS
&& DeviceInfo.Version.Major >= 13)
{
// Use Native Apple Sign In API's
r = await AppleSignInAuthenticator.AuthenticateAsync();
}
else
{
// Web Authentication flow
var authUrl = new Uri(authenticationUrl + scheme);
var callbackUrl = new Uri("xamarinessentials://");
r = await WebAuthenticator.AuthenticateAsync(authUrl, callbackUrl);
}
var authToken = string.Empty;
if (r.Properties.TryGetValue("name", out var name) && !string.IsNullOrEmpty(name))
authToken += $"Name: {name}{Environment.NewLine}";
if (r.Properties.TryGetValue("email", out var email) && !string.IsNullOrEmpty(email))
authToken += $"Email: {email}{Environment.NewLine}";
// Note that Apple Sign In has an IdToken and not an AccessToken
authToken += r?.AccessToken ?? r?.IdToken;
İpucu
İOS olmayan 13 cihazlarda, Android ve UWP cihazlarınızda Apple oturum açma özelliğini etkinleştirmek için de kullanılabilen Web kimlik doğrulama akışını başlatacak. Apple oturum açma sınamasını yapmak için iOS simülatöründe iCloud hesabınızda oturum açabilirsiniz.