Hitelesítés hozzáadása Xamarin.Android-alkalmazáshoz
Áttekintés
Ez a témakör bemutatja, hogyan hitelesítheti egy mobilalkalmazás felhasználóit az ügyfélalkalmazásból. Ebben az oktatóanyagban hitelesítést ad hozzá a gyorsindítási projekthez egy, az Azure Mobile Apps. A mobilalkalmazás sikeres hitelesítése és hitelesítése után megjelenik a felhasználói azonosító értéke.
Ez az oktatóanyag a Mobilalkalmazás rövid útmutatón alapul. Először be kell fejeznie a Xamarin.Android-alkalmazás létrehozása oktatóanyagot is. Ha nem használja a letöltött gyors indítási kiszolgálóprojektet, hozzá kell adni a hitelesítési bővítménycsomagot a projekthez. További információ a kiszolgálóbővítmény-csomagokról: Az Azure-hoz készült .NET háttérkiszolgálói SDK Mobile Apps.
Az alkalmazás regisztrálása hitelesítéshez és App Services
Először regisztrálnia kell az alkalmazást egy identitásszolgáltató webhelyén, majd be kell állítania a szolgáltató által létrehozott hitelesítő adatokat a Mobile Apps háttéralkalmazásban.
Konfigurálja az előnyben részesített identitásszolgáltatót a szolgáltatóra vonatkozó utasítások szerint:
Ismételje meg az előző lépéseket minden olyan szolgáltatónál, amit támogatni szeretne az alkalmazásban.
Az alkalmazás hozzáadása az engedélyezett külső átirányítási URL-címekhez
A biztonságos hitelesítéshez új URL-sémát kell definiálni az alkalmazáshoz. Ez lehetővé teszi, hogy a hitelesítési rendszer visszairányítsa az alkalmazást a hitelesítési folyamat befejezése után. Ebben az oktatóanyagban az alkalmazásnév URL-sémát használjuk végig. Azonban bármilyen URL-sémát használhat. A mobilalkalmazás egyedinek kell lennie. Az átirányítás engedélyezése a kiszolgálóoldalon:
A [Azure Portal] mezőben válassza ki App Service.
Kattintson a Hitelesítés / Engedélyezés menüpontra.
Az Engedélyezett külső átirányítási URL-címek beállításnál adja meg a következőt:
url_scheme_of_your_app://easyauth.callback
. Az url_scheme_of_your_app a sztringben a mobilalkalmazás URL-sémája. Egy protokoll normál URL-specifikációját kell követnie (csak betűket és számokat használjon, és betűvel kezdjen). Jegyezze fel a választott sztringet, mivel számos helyen módosítania kell a mobilalkalmazás kódját az URL-sémával.Kattintson az OK gombra.
Kattintson a Mentés gombra.
A hitelesített felhasználókra vonatkozó engedélyek korlátozása
Alapértelmezés szerint a háttér Mobile Apps API-k névtelenül hívhatóak meg. Ezután korlátoznia kell a hozzáférést csak a hitelesített ügyfelekre.
Node.js háttér (a Azure Portal) segítségével:
A saját Mobile Apps kattintson az Easy Tables (Egyszerű táblák) elemre , és válassza ki a táblát. Kattintson az Engedélyek módosítása elemre, válassza a Csak hitelesített hozzáférés minden engedélyhez lehetőséget, majd kattintson a Mentés gombra.
.NET-háttér (C#):
A kiszolgálóprojektben lépjen a ControllersTodoItemController.cs> fájlra. Adja hozzá az
[Authorize]
attribútumot a TodoItemController osztályhoz az alábbiak szerint. Ha csak bizonyos metódusok elérésére korlátozza a hozzáférést, ezt az attribútumot a osztály helyett csak azokra a metódusra is alkalmazhatja. Tegye közzé újra a kiszolgálóprojektet.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js háttér (egy kódon Node.js keresztül):
Ha hitelesítést szeretne megkövetelni a táblaeléréshez, adja hozzá a következő sort a Node.js-kiszolgálói szkripthez:
table.access = 'authenticated';
További részletekért lásd : How to: Require authentication for access to tables (Hogyan lehet: Hitelesítés megkövetelve a táblákhoz való hozzáféréshez). A gyorsindítási kódprojekt webhelyről való letöltésével kapcsolatos további információkért lásd : Útmutató: A Node.js háttér-rövid útmutató kódprojekt letöltése a Git használatával.
A Visual Studio Xamarin Studióban futtassa az ügyfélprojektet egy eszközön vagy emulátoron. Ellenőrizze, hogy az alkalmazás indításakor 401-es (Jogosulatlan) állapotkóddal nem kezelt kivétel történt-e. Ennek az az oka, hogy az alkalmazás nem hitelesített felhasználóként próbál hozzáférni a Mobile App háttéralkalmazáshoz. A TodoItem tábla hitelesítést igényel.
Ezután frissíteni fogja az ügyfélalkalmazást, hogy az egy hitelesített felhasználóval kérjen le erőforrásokat a Mobile App háttéralkalmazásból.
Hitelesítés hozzáadása az alkalmazáshoz
Az alkalmazás úgy frissül, hogy a felhasználók a Bejelentkezés gombra koppintva hitelesítsék magukat az adatok megjelenítése előtt.
Adja hozzá a következő kódot a TodoActivity osztályhoz :
// Define an authenticated user. private MobileServiceUser user; private async Task<bool> Authenticate() { var success = false; try { // Sign in with Facebook login using a server-managed flow. user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); CreateAndShowDialog(string.Format("you are now logged in - {0}", user.UserId), "Logged in!"); success = true; } catch (Exception ex) { CreateAndShowDialog(ex, "Authentication failed"); } return success; } [Java.Interop.Export()] public async void LoginUser(View view) { // Load data only after authentication succeeds. if (await Authenticate()) { //Hide the button after authentication succeeds. FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone; // Load the data. OnRefreshItemsSelected(); } } public override void OnResume() { base.OnResume(); Xamarin.Essentials.Platform.OnResume(); }
Ez létrehoz egy új metódust a felhasználók hitelesítéséhez és egy metóduskezelőt az új Bejelentkezés gombhoz . A fenti példakódban a felhasználót egy Facebook-bejelentkezéssel hitelesíti a rendszer. A rendszer egy párbeszédpanelen jeleníti meg a felhasználói azonosítót a hitelesítés után.
Megjegyzés
Ha a Facebooktól különböző identitásszolgáltatót használ, módosítsa a LoginAsync számára fent átadott értéket a következők egyikével: MicrosoftAccount, Twitter, Google vagy WindowsAzureActiveDirectory.
Az OnCreate metódusban törölje vagy megjegyzésként fűzi hozzá a következő kódsort:
OnRefreshItemsSelected ();
A Activity_To_Do.axml fájlban adja hozzá a következő LoginUser gombdefiníciót a meglévő AddItem gomb előtt:
<Button android:id="@+id/buttonLoginUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="LoginUser" android:text="@string/login_button_text" />
Adja hozzá a következő elemet Strings.xml erőforrásfájlhoz:
<string name="login_button_text">Sign in</string>
Nyissa meg AndroidManifest.xml fájlt, és adja hozzá a következő kódot az
<application>
XML-elemen belül:<activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="{url_scheme_of_your_app}" android:host="easyauth.callback" /> </intent-filter> </activity>
A Visual Studio Xamarin Studióban futtassa az ügyfélprojektet egy eszközön vagy emulátoron, és jelentkezzen be a választott identitásszolgáltatóval. Ha sikeresen bejelentkezett, az alkalmazás megjeleníti a bejelentkezési azonosítót és a todo elemek listáját, és ön is frissíti az adatokat.
Hibaelhárítás
Az alkalmazás a következővel összeomlott: Java.Lang.NoSuchMethodError: No static method startActivity
Bizonyos esetekben a támogatási csomagok ütközése csak figyelmeztetésként jelenik meg a Visual Studióban, de az alkalmazás futásidőben összeomlik, ez a kivétel. Ebben az esetben meg kell győződni arról, hogy a projektben hivatkozott összes támogatási csomag azonos verziójú. Az Azure Mobile Apps NuGet csomag Android platform esetén Xamarin.Android.Support.CustomTabs
-függőséggel rendelkezik, így ha a projektjében újabb támogatási csomagokat használ, akkor az ütközések elkerülése érdekében közvetlenül kell telepítenie ennek a csomagnak a szükséges verzióját.