Aracılığıyla paylaş


Uygulamanızı Azure AD’ye kaydetme ve RMS için etkinleştirme

Önemli

Mart 2020'ye kadar yayımlanan Microsoft Rights Management Service SDK sürümleri kullanım dışıdır; önceki sürümleri kullanan uygulamaların Mart 2020 sürümünü kullanacak şekilde güncelleştirilmiş olması gerekir. Tüm ayrıntılar için kullanımdan kaldırma bildirimine bakın.

Microsoft Rights Management Service SDK'sı için başka geliştirme planlanmıyor. Sınıflandırma, etiketleme ve koruma hizmetleri için Microsoft Bilgi Koruması SDK'sının benimsenmesini kesinlikle öneririz.

Bu konu başlığı altında, Azure portalı üzerinden uygulama kaydı ve RMS etkinleştirme için temel işlemlerde ve ardından Azure Active Directory Authentication Library (ADAL) ile kullanıcı kimlik doğrulamasında size yol gösterilir.

Kullanıcı kimlik doğrulaması nedir

Kullanıcı kimlik doğrulaması cihaz uygulamanız ve RMS altyapısı arasında iletişim kurmak için önemli bir adımdır. Bu kimlik doğrulama işleminde, geçerli kullanıcı ve kimlik doğrulama isteği hakkında temel bilgiler gerektiren standart OAuth 2.0 protokolü kullanılır.

Azure portalı üzerinden kayıt

Azure portalı üzerinden uygulamanızın kaydını yapılandırmak için bu kılavuzu izleyerek işe başlayın: Azure RMS’yi ADAL kimlik doğrulaması için yapılandırma. Daha sonra kullanmak üzere bu işlemden İstemci Kimliği ve Yeniden Yönlendirme Uri’si değerlerini kopyalayıp sakladığınızdan emin olun.

Information Protection Tümleştirme Sözleşmenizi (APIA) tamamlama

Uygulamanızı dağıtabilmeniz için önce Microsoft Information Protection ekibiyle bir IPIA’yı tamamlamanız gerekir. Tüm ayrıntılar için Üretime dağıtma konusunun ilk bölümüne bakın.

Uygulamanız için kullanıcı kimlik doğrulaması yapma

RMS API'lerinin her birinde, kullanıcının kimlik doğrulamasını etkinleştirmek için uygulanması gereken bir geri çağırma vardır. RMS SDK 4.2, bir erişim belirteci belirtmediğinizde, erişim belirtecinizin yenilenmesi gerektiğinde veya erişim belirtecinizin süresi dolduğunda, geri çağırması uygulamanızı kullanır.

Kimlik doğrulaması için hangi kitaplık kullanılmalı

Kimlik doğrulama geri çağırmanızı uygulamak için, uygun bir kitaplık indirmeniz ve geliştirme ortamını bunu kullanmak üzere yapılandırmanız gerekir. Bu platformlar için ADAL kitaplıklarını GitHub'da bulabilirsiniz.

Aşağıdaki kaynakların her biri, ortamınızın kurulumu ve kitaplık kullanımı için kılavuz içerir.

Not

ADAL’lerden birini kullanmanızı öneririz, ancak başka kimlik doğrulama kitaplıkları da kullanabilirsiniz.

Kimlik doğrulama parametreleri

ADAL, bir kullanıcının kimliğini Azure RMS’ye (veya AD RMS) başarıyla doğrulamak için bazı bilgiler gerektirir. Bunlar, standart OAuth 2.0 parametreleridir ve genellikle tüm Azure AD uygulamalarında gerekir. ADAL kullanımı için güncel kılavuzları, daha önce listelenmiş olan ilgili Github depolarının README dosyasında bulursunuz.

  • Yetkili – Genellikle AAD veya ADFS olan kimlik doğrulama uç noktası için URL.
  • Kaynak - genelde Azure RMS veya AD RMS olan, erişmeye çalıştığınız hizmet uygulamasının URL/URI'si.
  • Kullanıcı Kimliği – Uygulamaya erişmek isteyen kullanıcının UPN’si, genelde e-posta adresi. Bu parametre, kullanıcı henüz bilinmiyorsa boş olabilir ve kullanıcı simgesinin önbelleğe alınması veya önbellekten bir simge istemek için de kullanılabilir. Bu ayrıca genellikle, kullanıcıdan istemek için ipucu olarak da kullanılır.
  • İstemci kimliği – istemci uygulamanızın kimliği. Bu geçerli bir Azure AD uygulama kimliği olmalıdır ve Azure portal aracılığıyla önceki kayıt adımından gelir.
  • Yeniden yönlendirme Uri'si – kimlik doğrulama kodu için, URI hedefiyle kimlik doğrulama kitaplığını sağlar. iOS ve Android için özel biçimler gerekir. Bunlar, ADAL’nin ilgili GitHub depolarının README dosyalarında açıklanır. Bu değer, Azure portal aracılığıyla önceki kayıt adımından gelir.

Not

Kapsam şu anda kullanılmamaktadır ancak kullanılabilir ve bu nedenle gelecekteki kullanım için saklanmıştır.

Android: msauth://packagename/Base64UrlencodedSignature

Ios: <app-scheme>://<bundle-id>

Not

Uygulamanız bu kılavuzları izlemiyorsa, Azure RMS ve Azure AD iş akışları olasılıkla başarısız olur ve Microsoft.com tarafından desteklenmez. Ayrıca, bir üretim uygulamasında geçersiz bir İstemci Kimliği kullanılırsa, Hak Yönetimi Lisans Sözleşmesi (RMLA) ihlal edilebilir.

Bir kimlik doğrulama geri çağırma uygulaması neye benzemelidir

Kimlik Doğrulaması Kodu Örnekleri - Bu SDK’de, kimlik doğrulama geri çağırmaları kullanımını gösteren kod örneği vardır. Size kolaylık sağlamak için, bu kod örnekleri, burada ve sonraki bağlı konuların her birinde verilmiştir.

Android kullanıcı kimlik doğrulaması - daha fazla bilgi için, bkz. ilk senaryoda 2. Adım, "RMS korumalı dosya kullanma", Android kod örnekleri.

    class MsipcAuthenticationCallback implements AuthenticationRequestCallback
    {
    ...

    @Override
    public void getToken(Map<String, String> authenticationParametersMap,
                         final AuthenticationCompletionCallback authenticationCompletionCallbackToMsipc)
    {
        String authority = authenticationParametersMap.get("oauth2.authority");
        String resource = authenticationParametersMap.get("oauth2.resource");
        String userId = authenticationParametersMap.get("userId");
        mClientId = "12345678-ABCD-ABCD-ABCD-ABCDEFGH12"; // get your registered Azure AD application ID here
        mRedirectUri = "urn:ietf:wg:oauth:2.0:oob";
        final String userHint = (userId == null)? "" : userId;
        AuthenticationContext authenticationContext = App.getInstance().getAuthenticationContext();
        if (authenticationContext == null || !authenticationContext.getAuthority().equalsIgnoreCase(authority))
        {
            try
            {
                authenticationContext = new AuthenticationContext(App.getInstance().getApplicationContext(), authority, …);
                App.getInstance().setAuthenticationContext(authenticationContext);
            }
            catch (NoSuchAlgorithmException e)
            {
                …
                authenticationCompletionCallbackToMsipc.onFailure();
            }
            catch (NoSuchPaddingException e)
            {
                …
                authenticationCompletionCallbackToMsipc.onFailure();
            }
       }
        App.getInstance().getAuthenticationContext().acquireToken(mParentActivity, resource, mClientId, mRedirectURI, userId, mPromptBehavior,
                       "&USERNAME=" + userHint, new AuthenticationCallback<AuthenticationResult>()
                        {
                            @Override
                            public void onError(Exception exc)
                            {
                                …
                                if (exc instanceof AuthenticationCancelError)
                                {
                                     …
                                    authenticationCompletionCallbackToMsipc.onCancel();
                                }
                                else
                                {
                                     …
                                    authenticationCompletionCallbackToMsipc.onFailure();
                                }
                            }

                            @Override
                            public void onSuccess(AuthenticationResult result)
                            {
                                …
                                if (result == null || result.getAccessToken() == null
                                        || result.getAccessToken().isEmpty())
                                {
                                     …
                                }
                                else
                                {
                                    // request is successful
                                    …
                                    authenticationCompletionCallbackToMsipc.onSuccess(result.getAccessToken());
                                }
                            }
                        });
                         }

iOS/OS X kullanıcı kimlik doğrulaması - daha fazla bilgi için, bkz. ilk senaryoda 2. Adım, "RMS korumalı dosya kullanma", iOS/OS X kod örnekleri.

    // AuthenticationCallback holds the necessary information to retrieve an access token.
    @interface MsipcAuthenticationCallback : NSObject<MSAuthenticationCallback>

    @end

    @implementation MsipcAuthenticationCallback

    - (void)accessTokenWithAuthenticationParameters:
         (MSAuthenticationParameters *)authenticationParameters
                                completionBlock:
         (void(^)(NSString *accessToken, NSError *error))completionBlock
    {
    ADAuthenticationError *error;
    ADAuthenticationContext* context = [ADAuthenticationContext authenticationContextWithAuthority:authenticationParameters.authority error:&error];

    NSString *appClientId = @"12345678-ABCD-ABCD-ABCD-ABCDEFGH12";

    // get your registered Azure AD application ID here

    NSURL *redirectURI = [NSURL URLWithString:@"ms-sample://com.microsoft.sampleapp"];

    // get your <app-scheme>://<bundle-id> here
    // Retrieve token using ADAL
    [context acquireTokenWithResource:authenticationParameters.resource
                             clientId:appClientId
                          redirectUri:redirectURI
                               userId:authenticationParameters.userId
                      completionBlock:^(ADAuthenticationResult *result)
                      {
                          if (result.status != AD_SUCCEEDED)
                          {
                              NSLog(@"Auth Failed");
                              completionBlock(nil, result.error);
                          }
                          else
                          {
                              completionBlock(result.accessToken, result.error);
                          }
                      }

        ];
    }

Linux kullanıcı kimlik doğrulaması - daha fazla bilgi için, bkz. Linux kod örnekleri.

    // Class Header
    class AuthCallback : public IAuthenticationCallback {
    private:

      std::shared_ptr<rmsauth::FileCache> FileCachePtr;
      std::string clientId_;
      std::string redirectUrl_;

      public:

      AuthCallback(const std::string& clientId,
               const std::string& redirectUrl);
      virtual std::string GetToken(shared_ptr<AuthenticationParameters>& ap) override;
    };

    class ConsentCallback : public IConsentCallback {
      public:

      virtual ConsentList Consents(ConsentList& consents) override;
    };

    // Class Implementation
    AuthCallback::AuthCallback(const string& clientId, const string& redirectUrl)
    : clientId_(clientId), redirectUrl_(redirectUrl) {
      FileCachePtr = std::make_shared<FileCache>();
    }

    string AuthCallback::GetToken(shared_ptr<AuthenticationParameters>& ap)
    {
      string redirect =
      ap->Scope().empty() ? redirectUrl_ : ap->Scope();

      try
      {
        if (redirect.empty()) {
        throw rmscore::exceptions::RMSInvalidArgumentException(
              "redirect Url is empty");
      }

      if (clientId_.empty()) {
      throw rmscore::exceptions::RMSInvalidArgumentException("client Id is empty");
      }

      AuthenticationContext authContext(
        ap->Authority(), AuthorityValidationType::False, FileCachePtr);

      auto result = authContext.acquireToken(ap->Resource(),
                                           clientId_, redirect,
                                           PromptBehavior::Auto,
                                           ap->UserId());
      return result->accessToken();
      }

      catch (const rmsauth::Exception& ex)
      {
        // out logs
        throw;
      }
    }