Hitelesítés hozzáadása androidos alkalmazáshoz

Összefoglalás

Ebben az oktatóanyagban hitelesítést fog hozzáadni a todolist gyorsindítási projekthez Androidon egy támogatott identitásszolgáltató használatával. Ez az oktatóanyag a Első lépések útmutató Mobile Apps, amelyet először be kell fejeződnie.

Az alkalmazás regisztrálása hitelesítéshez és a Azure App Service

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.

  1. Konfigurálja az előnyben részesített identitásszolgáltatót a szolgáltatóra vonatkozó utasítások szerint:

  2. 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:

  1. A Azure Portal válassza ki a App Service.

  2. Kattintson a Hitelesítés / Engedélyezés menüpontra.

  3. Az Engedélyezett külső átirányítási URL-címek beállításnál adja meg a következőt: appname://easyauth.callback. Az ebben a sztringben található alkalmazásnév 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.

  4. Kattintson az OK gombra.

  5. 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 Android Studio nyissa meg az oktatóanyagban befejezett projektet, Első lépések a Mobile Apps. A Futtatás menüben kattintson az Alkalmazás futtatása elemre, és ellenőrizze, hogy az alkalmazás indításakor 401-es (Nem engedélyezett) állapotkóddal nem kezelt kivétel történt-e.

    Ez a kivétel azért fordul elő, mert az alkalmazás hitelesítés nélküli felhasználóként próbál hozzáférni a háttéralkalmazáshoz, de a TodoItem táblához hitelesítés szükséges.

Ezután frissíti az alkalmazást, hogy hitelesítse a felhasználókat, mielőtt erőforrásokat kér a Mobile Apps háttérből.

Hitelesítés hozzáadása az alkalmazáshoz

  1. Nyissa meg a projektet a Android Studio.

  2. A Project Explorer Android Studio nyissa meg a fájlt, ToDoActivity.java és adja hozzá a következő importálási utasításokat:

    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.atomic.AtomicBoolean;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    
    import com.microsoft.windowsazure.mobileservices.authentication.MobileServiceAuthenticationProvider;
    import com.microsoft.windowsazure.mobileservices.authentication.MobileServiceUser;
    
  3. Adja hozzá a következő metódust a ToDoActivity osztályhoz :

    // You can choose any unique number here to differentiate auth providers from each other. Note this is the same code at login() and onActivityResult().
    public static final int GOOGLE_LOGIN_REQUEST_CODE = 1;
    
    private void authenticate() {
        // Sign in using the Google provider.
        mClient.login(MobileServiceAuthenticationProvider.Google, "{url_scheme_of_your_app}", GOOGLE_LOGIN_REQUEST_CODE);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // When request completes
        if (resultCode == RESULT_OK) {
            // Check the request code matches the one we send in the login request
            if (requestCode == GOOGLE_LOGIN_REQUEST_CODE) {
                MobileServiceActivityResult result = mClient.onActivityResult(data);
                if (result.isLoggedIn()) {
                    // sign-in succeeded
                    createAndShowDialog(String.format("You are now signed in - %1$2s", mClient.getCurrentUser().getUserId()), "Success");
                    createTable();
                } else {
                    // sign-in failed, check the error message
                    String errorMessage = result.getErrorMessage();
                    createAndShowDialog(errorMessage, "Error");
                }
            }
        }
    }
    

    Ez a kód létrehoz egy metódust a Google hitelesítési folyamatának kezeléséhez. Egy párbeszédpanelen megjelenik a hitelesített felhasználó azonosítója. Csak sikeres hitelesítéssel folytathatja.

    Megjegyzés

    Ha nem Google identitásszolgáltatót használ, módosítsa a bejelentkezési módszernek átadott értéket a következő értékek egyikére: MicrosoftAccount, Facebook, Twitter vagy windowsazureactivedirectory.

  4. Az onCreate metódusban adja hozzá a következő kódsort az objektumot példányosítő kód MobileServiceClient után.

    authenticate();
    

    Ez a hívás elindítja a hitelesítési folyamatot.

  5. Helyezze át a fennmaradó kódot az authenticate();onCreate metódusban egy új createTable metódusba :

    private void createTable() {
    
        // Get the table instance to use.
        mToDoTable = mClient.getTable(ToDoItem.class);
    
        mTextNewToDo = (EditText) findViewById(R.id.textNewToDo);
    
        // Create an adapter to bind the items with the view.
        mAdapter = new ToDoItemAdapter(this, R.layout.row_list_to_do);
        ListView listViewToDo = (ListView) findViewById(R.id.listViewToDo);
        listViewToDo.setAdapter(mAdapter);
    
        // Load the items from Azure.
        refreshItemsFromTable();
    }
    
  6. Annak érdekében, hogy az átirányítás a várt módon működik, adja hozzá a következő kódrészletét RedirectUrlActivity a-hoz AndroidManifest.xml:

    <activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity">
        <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>
    
  7. Adja hozzá redirectUriScheme az build.gradle et az Android-alkalmazáshoz.

    android {
        buildTypes {
            release {
                // ...
                manifestPlaceholders = ['redirectUriScheme': '{url_scheme_of_your_app}://easyauth.callback']
            }
            debug {
                // ...
                manifestPlaceholders = ['redirectUriScheme': '{url_scheme_of_your_app}://easyauth.callback']
            }
        }
    }
    
  8. Adja com.android.support:customtabs:23.0.1 hozzá a et a függőségeihez:build.gradle

    dependencies {
        // ...
        compile 'com.android.support:customtabs:23.0.1'
    }
    
  9. A Run (Futtatás) menüben kattintson a Run app ( Alkalmazás futtatása) elemre az alkalmazás futtatásához és a választott identitásszolgáltatóval való bejelentkezéshez.

Figyelmeztetés

Az említett URL-séma megkülönbözteti a kis- és nagybetűket. Győződjön meg arról, hogy az összes előfordulása {url_scheme_of_you_app} ugyanazt az esetet használja.

Ha sikeresen bejelentkezett, az alkalmazásnak hibák nélkül kell futnia, és képesnek kell lennie a háttérszolgáltatás lekérdezésére és az adatok frissítésére.

Hitelesítési jogkivonatok gyorsítótárazva az ügyfélen

Az előző példa egy szabványos bejelentkezést mutatott be, amelyhez az ügyfélnek az alkalmazás minden indításakor kapcsolatba kell lépnie az identitásszolgáltatóval és a háttérbeli Azure-szolgáltatással. Ez a módszer nem hatékony, és használattal kapcsolatos problémákat okozhat, ha sok ügyfél próbálja egyszerre elindítani az alkalmazást. Jobb megoldás, ha gyorsítótárazza az Azure-szolgáltatás által visszaadott engedélyezési jogkivonatot, és ezt próbálja meg először használni a szolgáltatóalapú bejelentkezés használata előtt.

Megjegyzés

A háttérbeli Azure-szolgáltatás által kiadott jogkivonatot gyorsítótárazhatja, függetlenül attól, hogy ügyfél által felügyelt vagy szolgáltatás által felügyelt hitelesítést használ. Ez az oktatóanyag szolgáltatás által felügyelt hitelesítést használ.

  1. Nyissa meg a ToDoActivity.java fájlt, és adja hozzá a következő importálási utasításokat:

    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    
  2. Adja hozzá a következő tagokat a osztályhoz ToDoActivity .

    public static final String SHAREDPREFFILE = "temp";
    public static final String USERIDPREF = "uid";
    public static final String TOKENPREF = "tkn";
    
  3. A ToDoActivity.java fájlban adja hozzá a következő definíciót a metódushoz cacheUserToken .

    private void cacheUserToken(MobileServiceUser user)
    {
        SharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);
        Editor editor = prefs.edit();
        editor.putString(USERIDPREF, user.getUserId());
        editor.putString(TOKENPREF, user.getAuthenticationToken());
        editor.commit();
    }
    

    Ez a metódus a felhasználói azonosítót és a jogkivonatot egy privátként megjelölt preferenciafájlban tárolja. Ezzel meg kell védeni a gyorsítótárhoz való hozzáférést, hogy az eszközön lévő többi alkalmazás ne fér hozzá a jogkivonathoz. A preferencia az alkalmazáshoz a védőfalon belül van megszabadva. Ha azonban valaki hozzáférést szerez az eszközhöz, előfordulhat, hogy más módon is hozzáfér a jogkivonat-gyorsítótárhoz.

    Megjegyzés

    A jogkivonat titkosítással tovább védheti, ha az adatokhoz való jogkivonat-hozzáférés rendkívül bizalmasnak minősül, és valaki hozzáférést kaphat az eszközhöz. Egy teljesen biztonságos megoldás azonban túlmutat ennek az oktatóanyagnak a hatókörében, és a biztonsági követelményektől függ.

  4. A ToDoActivity.java fájlban adja hozzá a következő definíciót a metódushoz loadUserTokenCache .

    private boolean loadUserTokenCache(MobileServiceClient client)
    {
        SharedPreferences prefs = getSharedPreferences(SHAREDPREFFILE, Context.MODE_PRIVATE);
        String userId = prefs.getString(USERIDPREF, null);
        if (userId == null)
            return false;
        String token = prefs.getString(TOKENPREF, null);
        if (token == null)
            return false;
    
        MobileServiceUser user = new MobileServiceUser(userId);
        user.setAuthenticationToken(token);
        client.setCurrentUser(user);
    
        return true;
    }
    
  5. A ToDoActivity.java fájlban cserélje authenticate le a és onActivityResult a metódust a következőre, amely egy jogkivonat-gyorsítótárat használ. Ha nem Google-fiókot szeretne használni, módosítsa a bejelentkezési szolgáltatót.

    private void authenticate() {
        // We first try to load a token cache if one exists.
        if (loadUserTokenCache(mClient))
        {
            createTable();
        }
        // If we failed to load a token cache, sign in and create a token cache
        else
        {
            // Sign in using the Google provider.
            mClient.login(MobileServiceAuthenticationProvider.Google, "{url_scheme_of_your_app}", GOOGLE_LOGIN_REQUEST_CODE);
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // When request completes
        if (resultCode == RESULT_OK) {
            // Check the request code matches the one we send in the sign-in request
            if (requestCode == GOOGLE_LOGIN_REQUEST_CODE) {
                MobileServiceActivityResult result = mClient.onActivityResult(data);
                if (result.isLoggedIn()) {
                    // sign-in succeeded
                    createAndShowDialog(String.format("You are now signed in - %1$2s", mClient.getCurrentUser().getUserId()), "Success");
                    cacheUserToken(mClient.getCurrentUser());
                    createTable();
                } else {
                    // sign-in failed, check the error message
                    String errorMessage = result.getErrorMessage();
                    createAndShowDialog(errorMessage, "Error");
                }
            }
        }
    }
    
  6. Készítse el az alkalmazást, és tesztelje a hitelesítést egy érvényes fiókkal. Futtassa legalább kétszer. Az első futtatás során a rendszer felkéri, hogy jelentkezzen be és hozza létre a jogkivonat-gyorsítótárat. Ezt követően minden futtatás megkísérli betölteni a jogkivonat-gyorsítótárat a hitelesítéshez. Nem szükséges bejelentkeznie.

Következő lépések

Most, hogy befejezte ezt az alapszintű hitelesítési oktatóanyagot, folytatja a következő oktatóanyagok egyikével: