Giyilebilir cihazlarda kimlik doğrulama

Wear OS uygulamaları, tamamlayıcı uygulama olmadan bağımsız olarak çalışabilir. Bu, Wear OS uygulamasının internetteki verilere erişirken kimlik doğrulamayı kendi başına yönetmesi gerektiği anlamına gelir. Ancak kol saatinin küçük ekran boyutu ve sınırlı giriş özellikleri, Wear OS uygulamasının kullanabileceği kimlik doğrulama seçeneklerini sınırlandırır.

Bu kılavuzda, Wear OS uygulamaları için önerilen kimlik doğrulama yöntemlerinin yanı sıra bu yöntemlerin bir uygulamanın kullanım alanına uymadığı durumlarda kullanılabilecek alternatifler ele alınmaktadır.

İyi bir oturum açma deneyimi tasarlama hakkında daha fazla bilgi edinmek için Oturum açma kullanıcı deneyimi kılavuzunu inceleyin.

Misafir modu

Tüm işlevler için kimlik doğrulama gerektirmez. Bunun yerine, kullanıcının oturum açmasını gerektirmeden mümkün olduğunca fazla özellik sunun.

Kullanıcılar, mobil uygulamayı kullanmadan Wear uygulamanızı bulup yükleyebilir. Bu nedenle, hesapları olmayabilir ve uygulamanın sunduğu özellikleri bilmiyor olabilirler. Misafir modu işlevinin, uygulamanızın özelliklerini doğru bir şekilde gösterdiğinden emin olun.

Bazı cihazlar daha uzun süre kilidi açık kalabilir

Wear OS 5 veya sonraki bir sürümü çalıştıran desteklenen cihazlarda sistem, kullanıcının cihazı bileğinde takıp takmadığını algılar. Kullanıcı bilek algılamayı kapatıp cihazı bileğinden çıkarırsa sistem, cihazın kilidini normalden daha uzun süre açık tutar.

Uygulamanız daha yüksek düzeyde güvenlik gerektiriyorsa (ör. hassas veya özel veriler gösterilirken) önce bilek algılamanın etkin olup olmadığını kontrol edin:

val wristDetectionEnabled =
        isWristDetectionAutoLockingEnabled(applicationContext)

Bu yöntemin döndürdüğü değer false ise kullanıcıya, kullanıcıya özel içerik göstermeden önce uygulamanızda bir hesapta oturum açmasını isteyin.

Önerilen kimlik doğrulama yöntemleri

Bağımsız Wear OS uygulamalarının kullanıcı kimlik doğrulama kimlik bilgilerini almasını sağlamak için aşağıdaki kimlik doğrulama yöntemlerini kullanın.

Veri katmanını kullanarak jeton aktarma

Telefon tamamlayıcı uygulaması, Wearable Veri Katmanı'nı kullanarak kimlik doğrulama verilerini Wear OS uygulamasına güvenli bir şekilde aktarabilir. Kimlik bilgilerini mesaj veya veri öğesi olarak aktarın.

Bu tür kimlik doğrulama genellikle kullanıcının herhangi bir işlem yapmasına gerek bırakmaz. Ancak kullanıcıya oturum açtığını bildirmeden kimlik doğrulama yapmamaya çalışın. Hesabının mobil cihazdan aktarıldığını gösteren basit ve kapatılabilir bir ekran kullanarak kullanıcıyı bilgilendirebilirsiniz.

Önemli: Bu seçenek yalnızca Android'le eşlenmiş kol saatlerinde, ilgili mobil uygulama yüklendiğinde çalıştığından Wear uygulamanız en az bir başka kimlik doğrulama yöntemi sunmalıdır. İlgili mobil uygulamaya sahip olmayan veya Wear OS cihazı iOS cihazla eşlenmiş kullanıcılar için alternatif bir kimlik doğrulama yöntemi sağlayın.

Aşağıdaki örnekte gösterildiği gibi, mobil uygulamadan veri katmanını kullanarak jetonları iletin:

val token = "..." // Auth token to transmit to the wearable device.
val dataClient: DataClient = Wearable.getDataClient(context)
val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run {
    dataMap.putString("token", token)
    asPutDataRequest()
}
val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)

Aşağıdaki örnekte gösterildiği gibi kol saati uygulamasında veri değişikliği etkinliklerini dinleyin:

val dataClient: DataClient = Wearable.getDataClient(context)
dataClient.addListener{ dataEvents ->
    dataEvents.forEach { event ->
        if (event.type == DataEvent.TYPE_CHANGED) {
            val dataItemPath = event.dataItem.uri.path ?: ""
            if (dataItemPath.startsWith("/auth")) {
                val token = DataMapItem.fromDataItem(event.dataItem).dataMap.getString("token")
                // Display interstitial screen to notify the user they are being signed in.
                // Then, store the token and use it in network requests.
            }
        }
    }
}

Wearable Veri Katmanı'nı kullanma hakkında daha fazla bilgi için Wear OS'te veri gönderme ve senkronize etme başlıklı makaleyi inceleyin.

OAuth 2.0'ı kullanma

Wear OS, aşağıdaki bölümlerde açıklanan iki OAuth 2.0 tabanlı akışı destekler:

  • RFC 7636'da tanımlandığı şekilde Kod Değişimi için Kanıt Anahtarı (PKCE) ile Yetkilendirme Kodu Verme
  • RFC 8628'de tanımlandığı şekliyle Cihaz Yetkilendirmesi

Not: Kol saati ortam moduna geçtiğinde uygulamanızın kapanmaması için kimlik doğrulaması yapan etkinlikte AmbientModeSupport.attach kullanılarak her zaman açık özelliğini etkinleştirin. Ambiyans Modu'ndaki en iyi uygulamalar hakkında daha fazla bilgi için Uygulamanızı Wear'da görünür tutma başlıklı makaleyi inceleyin.

Kod Değişimi için Kanıt Anahtarı (PKCE)

PKCE'yi etkili bir şekilde kullanmak için RemoteAuthClient kullanın.

Wear OS uygulamanızdan bir OAuth sağlayıcıya kimlik doğrulama isteği göndermek için bir OAuthRequest sınıfı nesnesi oluşturun. Bu nesne, jeton almak için OAuth uç noktanızın URL'sinden ve bir CodeChallenge nesnesinden oluşur. Aşağıdaki kodda, kimlik doğrulama isteği oluşturma örneği gösterilmektedir:

val request = OAuthRequest.Builder(this.applicationContext)
    .setAuthProviderUrl(Uri.parse("https://...."))
    .setClientId(clientId)
    .setCodeChallenge(codeChallenge)
    .build()

Kimlik doğrulama isteğini oluşturduktan sonra sendAuthorizationRequest() yöntemini kullanarak tamamlayıcı uygulamaya gönderin:

val client = RemoteAuthClient.create(this)
client.sendAuthorizationRequest(request,
    { command -> command?.run() },
    object : RemoteAuthClient.Callback() {
        override fun onAuthorizationResponse(
            request: OAuthRequest,
            response: OAuthResponse
        ) {
            // Extract the token from the response, store it and use it in network requests.
        }

        override fun onAuthorizationError(errorCode: Int) {
            // Handle error
        }
    }
)

Bu istek, tamamlayıcı uygulamaya bir çağrı gönderir. Tamamlayıcı uygulama da kullanıcının cep telefonundaki bir web tarayıcısında yetkilendirme kullanıcı arayüzünü gösterir. OAuth 2.0 sağlayıcısı, kullanıcının kimliğini doğrular ve istenen izinler için kullanıcının iznini alır. Yanıt, otomatik olarak oluşturulan yönlendirme URL'sine gönderilir.

Yetkilendirme başarılı veya başarısız olduktan sonra OAuth 2.0 sunucusu, istekte belirtilen URL'ye yönlendirir. Kullanıcı erişim isteğini onaylarsa yanıtta bir yetkilendirme kodu bulunur. Kullanıcı isteği onaylamıyorsa yanıtta bir hata mesajı yer alır.

Yanıt, sorgu dizesi biçimindedir ve aşağıdaki örneklerden birine benzer:

  https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz
  https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz

Bu işlem, kullanıcıyı tamamlayıcı uygulamaya yönlendiren bir sayfa yükler. Tamamlayıcı uygulama, yanıt URL'sini doğrular ve yanıtı onAuthorizationResponse API'yi kullanarak üçüncü taraf kol saati uygulamasına iletir.

Kol saati uygulaması, yetkilendirme kodunu bir erişim jetonuyla değiştirebilir.

Not: OAuthRequest oluşturulduktan sonra redirectUrl değerine erişerek yönlendirme URL'nizi bulabilirsiniz.

Cihaz Yetkilendirmesi

Cihaz Yetkilendirmesi İzni kullanılırken kullanıcı, doğrulama URI'sini başka bir cihazda açar. Ardından yetkilendirme sunucusu, kullanıcıdan isteği onaylamasını veya reddetmesini ister.

Bu işlemi kolaylaştırmak için kullanıcının eşlenen mobil cihazında bir web sayfası açmak üzere aşağıdaki örnekte gösterildiği gibi RemoteActivityHelper simgesini kullanın:

// Request access from the authorization server and receive Device Authorization Response.
val verificationUri = "..." // Extracted from the Device Authorization Response.
RemoteActivityHelper.startRemoteActivity(
    this,
    Intent(Intent.ACTION_VIEW)
        .addCategory(Intent.CATEGORY_BROWSABLE)
        .setData(Uri.parse(verificationUri)),
    null
)
// Poll the authorization server to find out if the user completed the user authorization
// step on their mobile device.

iOS uygulamanız varsa jetonu yetkilendirmek için tarayıcıya güvenmek yerine uygulamanızda bu intent'i durdurmak için evrensel bağlantıları kullanın.

Diğer kimlik doğrulama yöntemleri

Wear OS, aşağıdaki bölümlerde açıklanan ek oturum açma yöntemlerini destekler.

Google ile Oturum Açma

Google ile oturum açma, kullanıcının mevcut Google Hesabı ile oturum açmasına olanak tanır. En iyi kullanıcı deneyimini sunar ve özellikle de el cihazı uygulamalarınızda zaten kullanıyorsanız desteği kolaydır.

Daha önce açıklanan önerilen kimlik doğrulama yöntemlerinin ardından, iOS'te de iyi çalıştığı için Google Hesabı tercih edilen bir sonraki çözümdür. Aşağıdaki bölümde, temel bir Google ile oturum açma entegrasyonunun nasıl tamamlanacağı açıklanmaktadır.

Ön koşullar

Google ile oturum açma özelliğini Wear OS uygulamanıza entegre etmeye başlamadan önce bir Google API Konsolu projesi yapılandırmanız ve Android Studio projenizi ayarlamanız gerekir. Daha fazla bilgi için Google ile oturum açma özelliğini Android uygulamanıza entegre etmeye başlama başlıklı makaleyi inceleyin.

Google ile oturum açma özelliğini arka uç sunucusuyla iletişim kuran bir uygulama veya siteyle kullanıyorsanız iki ek ön koşul vardır:

  • Arka uç sunucunuz için bir OAuth 2.0 web uygulaması istemci kimliği oluşturun. Bu istemci kimliği, uygulamanızın istemci kimliğinden farklıdır. Daha fazla bilgi için Sunucu Tarafı Erişimi Etkinleştirme başlıklı makaleyi inceleyin.
  • HTTPS kullanarak kullanıcının kimlik jetonunu göndererek şu anda oturum açmış olan kullanıcıyı sunucuda güvenli bir şekilde tanımlayın. Arka uç sunucusunda kullanıcınızın kimliğini nasıl doğrulayacağınızı öğrenmek için Arka uç sunucusuyla kimlik doğrulama başlıklı makaleyi inceleyin.

Google ile oturum açma özelliğini uygulamanıza entegre etme

Google ile oturum açma özelliğini Wear OS uygulamanıza entegre etmek için aşağıdaki bölümlerde ayrıntılı olarak açıklanan adımları inceleyip uygulayın:

  1. Google ile Oturum Açma'yı yapılandırın.
  2. Google ile oturum açma düğmesi ekleyin.
  3. Oturum açma düğmesine dokunulduğunda oturum açma akışını başlatın.

Google ile oturum açma özelliğini yapılandırma ve GoogleApiClient nesnesini oluşturma

Oturum açma etkinliğinizin onCreate() yönteminde, Google ile oturum açma özelliğini, uygulamanızın gerektirdiği kullanıcı verilerini isteyecek şekilde yapılandırın. Ardından, Google ile oturum açma API'sine ve belirttiğiniz seçeneklere erişimi olan bir GoogleApiClient nesnesi oluşturun. Bu adımlar aşağıdaki örnekte gösterilmektedir:

public class MyNewActivity extends AppCompatActivity {

    private static final int RC_SIGN_IN = 9001;

    private GoogleSignInClient mSignInClient;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        GoogleSignInOptions options =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .build();

        mSignInClient = GoogleSignIn.getClient(this, options);
    }
}

Uygulamanıza Google ile oturum açma düğmesi ekleme

Google ile oturum açma düğmesi eklemek için aşağıdaki adımları uygulayın:

  1. SignInButton simgesini uygulamanızın düzenine ekleyin:
  2.  <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
  3. Uygulamanızın onCreate() yönteminde, düğmenizin OnClickListener değerini kaydederek kullanıcının tıklandığında oturum açmasını sağlayın:
  4. Kotlin

    findViewById<View>(R.id.sign_in_button).setOnClickListener(this)

    Java

    findViewById(R.id.sign_in_button).setOnClickListener(this);

Oturum açma intent'i oluşturma ve oturum açma akışını başlatma

getSignInIntent() yöntemiyle oturum açma isteği oluşturarak onCLick() yönteminizle oturum açma düğmesine dokunma işlemlerini yönetin. Ardından, startActivityForResult() yöntemiyle niyeti başlatın.

Intent intent = mSignInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);

Kullanıcıdan oturum açmak için bir Google Hesabı seçmesi istenir. Profil, e-posta ve açık kimliğin dışında kapsamlar istediyseniz kullanıcıdan bu kaynaklara da erişim izni vermesi istenir.

Son olarak, etkinliğin onActivityResult yönteminde, oturum açma sonucunu getSignInResultFromIntent ile alın. Oturum açma sonucunu aldıktan sonra, oturum açmanın başarılı olup olmadığını isSuccess yöntemini kullanarak kontrol edebilirsiniz. Oturum açma işlemi başarılı olursa oturum açan kullanıcıyla ilgili bilgileri (ör. kullanıcının adı) içeren bir GoogleSignInAccount nesnesi almak için getSignInAccount yöntemini çağırabilirsiniz. Bu adımlar aşağıdaki örnekte gösterilmektedir:

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        Auth.GoogleSignInApi.getSignInResultFromIntent(data)?.apply {
            if (isSuccess) {
                // Get account information.
                fullName = signInAccount?.displayName
                mGivenName = signInAccount?.givenName
                mFamilyName = signInAccount?.familyName
                mEmail = signInAccount?.email
            }
        }
    }
}

Java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (signInResult.isSuccess()) {
            GoogleSignInAccount acct = signInResult.getSignInAccount();

            // Get account information.
            fullName = acct.getDisplayName();
            givenName = acct.getGivenName();
            familyName = acct.getFamilyName();
            email = acct.getEmail();
        }
    }
}

Google ile oturum açma özelliğini uygulayan örnek bir uygulama görmek için GitHub'daki Horologist Google ile oturum açma örneğine bakın.

Özel kod kimlik doğrulaması

Daha önce açıklanan kimlik doğrulama yöntemlerine alternatif olarak, kullanıcının cep telefonu veya tablet gibi başka bir cihazdan kimlik doğrulaması yapmasını ve kısa süreli bir sayısal kod almasını zorunlu kılabilirsiniz. Ardından kullanıcı, kimliğini doğrulamak için Wear OS cihazına kodu girer ve bir kimlik doğrulama jetonu alır.

Bu kimlik doğrulama akışı, uygulamanızın giriş modülünü kullanır veya uygulamanızın koduna manuel olarak bir üçüncü taraf kimlik doğrulama sağlayıcı oturum açma yöntemi entegre eder. Bu kimlik doğrulama yönteminin daha güvenli olması için manuel çalışma ve ek çaba gerektirmesine rağmen, bağımsız Wear OS uygulamalarınızda daha erken kimlik doğrulamasına ihtiyacınız varsa bu yöntemi kullanabilirsiniz.

Bu kurulum için kimlik doğrulama akışı aşağıdaki şekilde çalışır:

  1. Kullanıcı, Wear OS uygulamasında yetkilendirme gerektiren bir işlem gerçekleştirir.
  2. Wear OS uygulaması kullanıcıya bir kimlik doğrulama ekranı gösterir ve kullanıcıdan belirli bir URL'den kod girmesini ister.
  3. Kullanıcı bir mobil cihaza, tablete veya PC'ye geçer, ardından bir tarayıcı açar, Wear OS uygulamasında belirtilen URL'ye gider ve oturum açar.
  4. Kullanıcıya, Wear OS'teki yerleşik klavyeyi kullanarak Wear OS uygulama kimlik doğrulama ekranına gireceği kısa süreli bir sayısal kod gönderilir:

  5. Bu noktadan itibaren, girilen kodu doğru kullanıcının kanıtı olarak kullanabilir ve gelecekteki kimliği doğrulanmış aramalar için kodu Wear OS cihazında depolanan ve güvenli bir şekilde saklanan bir kimlik doğrulama jetonuyla değiştirebilirsiniz.

Not: Kullanıcının oluşturduğu kod tamamen sayısal olmalı ve alfabetik karakterler içermemelidir.

Bu kimlik doğrulama akışı aşağıdaki grafikte gösterilmektedir: