Microsoft Information Protection SDK — koncepcje uwierzytelniania
Uwierzytelnianie w zestawie MIP SDK polega na rozszerzaniu klasy w mip::AuthDelegate celu wdrożenia preferowanej metody uwierzytelniania. mip::AuthDelegate zawiera:
mip::AuthDelegate::OAuth2Challenge— klasa, która zarządza informacjami o uprawnieniach OAuth2 i udostępnia aplikacji klienckiej.mip::AuthDelegate::OAuth2Token— klasa zarządza pozyskiwaniem tokenów dostępu OAuth2 (z aplikacji klienckiej) i magazynem tokenu.mip::AuthDelegate::AcquireOAuth2Token()— funkcja wyłącznie wirtualna, której implementacja określa metodę uzyskiwania dostępu do tokenu. Po wywołaniu przez zestaw SDK uzyskuje token dostępu, a następnie ponownie udostępnia go do logiki uwierzytelniania zestawu SDK.
mip::AuthDelegate::AcquireOAuth2Token przyjmuje następujące parametry i zwraca wartość logiczną wskazującą, czy uzyskanie tokenu powiodło się:
mip::Identity: Tożsamość użytkownika lub usługi, która ma zostać uwierzytelniona, jeśli jest znana.mip::AuthDelegate::OAuth2Challenge: Akceptuje czterymip::AuthDelegate::OAuth2Challengeuprawnienia, zasoby,roszczeniai zakresy. Urząd to usługa, na podstawie która zostanie wygenerowany token. Zasób to usługa, do których próbujemy uzyskać dostęp. Zestaw SDK będzie obsługiwać przekazywanie tych parametrów pełnomocnikowi, gdy zostanie on wywołany. Roszczenia to roszczenia dotyczące konkretnych etykiet wymagane przez usługę ochrony. Zakresy to zakresy uprawnień usługi Azure AD wymagane do uzyskania dostępu do zasobu.mip::AuthDelegate::OAuth2Token: Wynik tokenu zostanie zapisany w tym obiekcie. Będzie on konsumowany przez zestaw SDK podczas ładowania aparatu. Poza naszym wdrożeniem uwierzytelniania nie powinno być konieczne uzyskiwanie ani ustawianie tej wartości w dowolnym miejscu.
Ważne: Aplikacje nie dzwonią bezpośrednio. Zestaw SDK zadzwoni do tej funkcji, gdy będzie to wymagane.
Zgoda
Usługa Azure AD wymaga, aby aplikacja otrzymała zgodę, zanim zostanie jej nadana uprawnienie do dostępu do zabezpieczonych zasobów/interfejsów API przy użyciu tożsamości konta. Zgoda jest rejestrowana jako trwałe potwierdzenie uprawnień w dzierżawie konta, dla określonego konta (zgoda użytkownika) lub wszystkich kont (zgoda administratora). Zgoda występuje w różnych scenariuszach, zależnie od dostępu do interfejsu API i uprawnień, których aplikacja szuka, oraz konta używanego do logowania:
- z tej samej dzierżawy, w której zarejestrowano aplikację, jeśli Ty lub administrator jawnie nie udzielili wstępnie zgody na dostęp za pośrednictwem funkcji "Udzielanie uprawnień".
- kont z innej dzierżawy, jeśli Twoja aplikacja jest zarejestrowana jako wielodostępna, a administrator dzierżawy nie wyrażał wstępnie zgody dla wszystkich użytkowników z wyprzedzeniem.
Klasa wyliczana implementuje łatwe w użyciu podejście, które pozwala deweloperom aplikacji na dostarczenie niestandardowego środowiska zgody opartego na punkcie końcowym, do którego uzyskuje dostęp zestaw mip::Consent SDK. Powiadomienie może informować użytkownika o zbieranych danych, o sposobu ich usunięcia lub o wszelkich innych informacjach wymaganych przez prawo lub zasady zgodności. Gdy użytkownik udziela zgody, aplikacja może być kontynuowana.
Implementacja
Zgoda jest zaimplementowana przez rozszerzenie klasy mip::Consent podstawowej i zaimplementowanie GetUserConsent zwracania jednej z wartości mip::Consent wyli roku.
Obiekt pochodzący z mip::Consent jest przekazywany do mip::FileProfile::Settingsmip::ProtectionProfile::Settings konstruktora lub.
Gdy użytkownik wykonuje operację, która wymaga wyrażenia zgody, zestaw SDK wywołuje metodę, podając docelowy adres GetUserConsent URL jako parametr. Ta metoda polega na zaimplementowaniu wyświetlania użytkownikowi niezbędnych informacji, co pozwoli mu podjąć decyzję, czy wyraża on zgodę na korzystanie z usługi.
Opcje zgody
- AcceptAlway:Zgoda i pamiętanie decyzji.
- Zaakceptuj:Zgoda raz.
- Odrzuć:nie wyrażaj zgody.
Gdy zestaw SDK żąda zgody użytkownika przy użyciu tej metody, aplikacja klienkowa powinna przedstawić użytkownikowi adres URL. Aplikacje klienckie powinny zapewniać sposób uzyskiwania zgody użytkownika i zwracać odpowiednie wyli roku zgody odpowiadające decyzji użytkownika.
Przykładowa implementacja
consent_delegate_impl.h
class ConsentDelegateImpl final : public mip::ConsentDelegate {
public:
ConsentDelegateImpl() = default;
virtual mip::Consent GetUserConsent(const std::string& url) override;
};
consent_delegate_impl.cpp
Gdy zestaw SDK wymaga zgody, metoda jest wywoływana przez zestaw SDK i adres GetUserConsent URL przekazany jako parametr. GetUserConsent W poniższym przykładzie użytkownik jest powiadamiany, że zestaw SDK połączy się z tym dostarczonym adresem URL i udostępnia użytkownikowi opcję w wierszu polecenia. Zależnie od wyboru wybranego przez użytkownika użytkownik zaakceptuje lub odrzuci zgodę, która jest przekazywana do zestawu SDK. Jeśli użytkownik odmówi wyrażenia zgody, aplikacja zgłasza wyjątek i żadne wywołanie nie jest wykonane w usłudze ochrony.
Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
//Print the consent URL, ask user to choose
std::cout << "SDK will connect to: " << url << std::endl;
std::cout << "1) Accept Always" << std::endl;
std::cout << "2) Accept" << std::endl;
std::cout << "3) Reject" << std::endl;
std::cout << "Select an option: ";
char input;
std::cin >> input;
switch (input)
{
case '1':
return Consent::AcceptAlways;
break;
case '2':
return Consent::Accept;
break;
case '3':
return Consent::Reject;
break;
default:
return Consent::Reject;
}
}
Na potrzeby testowania i tworzenia aplikacji można ConsentDelegate zaimplementować prostą, która wygląda następująco:
Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
return Consent::AcceptAlways;
}
Jednak w kodzie produkcyjnym użytkownik może być zobowiązany do wyrażenia zgody w zależności od wymagań regionalnych lub biznesowych oraz przepisów.
Następne kroki
Dla uproszczenia przykłady wskazujące pełnomocnika będą zaimplementować pozyskiwanie tokenu, wywołując skrypt zewnętrzny. Ten skrypt może zostać zastąpiony innym typem skryptu, biblioteką open source OAuth2 lub niestandardową biblioteką OAuth2.