Sprache

IdentityCredential.GetEntries Methode

Definition

Abrufen von Dateneinträgen und zugeordneten Daten aus diesem IdentityCredential.

[Android.Runtime.Register("getEntries", "([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;", "GetGetEntries_arrayBLjava_util_Map_arrayBarrayBHandler", ApiSince=30)]
public abstract Android.Security.Identity.ResultData GetEntries(byte[]? requestMessage, System.Collections.Generic.IDictionary<string,System.Collections.Generic.ICollection<string>> entriesToRequest, byte[]? sessionTranscript, byte[]? readerSignature);
[<Android.Runtime.Register("getEntries", "([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;", "GetGetEntries_arrayBLjava_util_Map_arrayBarrayBHandler", ApiSince=30)>]
abstract member GetEntries : byte[] * System.Collections.Generic.IDictionary<string, System.Collections.Generic.ICollection<string>> * byte[] * byte[] -> Android.Security.Identity.ResultData

Parameter

requestMessage
Byte[]

Wenn nicht null, dürfen CBOR-Daten enthalten, die dem oben genannten Schema entsprechen.

entriesToRequest
IDictionary<String,ICollection<String>>

Die anzufordernden Einträge, organisiert als Zuordnung von Namespacenamen, wobei jeder Wert eine Sammlung von Datenelementen im angegebenen Namespace ist.

sessionTranscript
Byte[]
readerSignature
Byte[]

Eine COSE_Sign1 Struktur wie oben beschrieben oder null wenn die Leseauthentifizierung nicht verwendet wird.

Gibt zurück

Ein ResultData Objekt, das Eintragsdaten nach Namespace organisiert und eine kryptografisch authentifizierte Darstellung derselben Daten enthält.

Attribute

Hinweise

Abrufen von Dateneinträgen und zugeordneten Daten aus diesem IdentityCredential.

Wenn eine Zugriffssteuerungsprüfung für einen der angeforderten Einträge fehlschlägt oder der Eintrag nicht vorhanden ist, wird der Eintrag einfach nicht zurückgegeben. Die Anwendung kann dies mithilfe der ResultData#getStatus(String, String) Methode für jede der angeforderten Einträge erkennen.

Es ist zulässig, diese Methode mehrmals mit derselben Instanz aufzurufen, aber wenn dies geschieht, muss der sessionTranscript Parameter für jeden Aufruf identisch sein. Wenn dies nicht der Fall ist, wird die SessionTranscriptMismatchException Ausnahme ausgelöst. Wenn dies derselbe Authentifizierungsschlüssel ist, wird außerdem verwendet.

Die Anwendung sollte keine Annahmen darüber treffen, ob die Benutzerauthentifizierung erforderlich ist. Stattdessen sollte die Anwendung zuerst die Werte der Datenelemente anfordern und dann die zurückgegebene ResultDataÜberprüfen. Wenn ResultData#STATUS_USER_AUTHENTICATION_FAILED die Anwendung zurückgegeben wird, sollte ein android.hardware.biometrics.BiometricPrompt.CryptoObject Objekt abgerufen werden, das auf dieses Objekt verweist und es mit einem android.hardware.biometrics.BiometricPrompt. Nach erfolgreicher Authentifizierung kann die Anwendung erneut aufrufen #getEntries(byte[], Map, byte[], byte[]) .

Wenn der requestMessage Parameter nicht null Daten für die Anforderung vom Prüfer enthalten muss. Der Inhalt kann so definiert werden, wie es für die Anmeldeinformationen geeignet ist, aber es gibt drei Anforderungen, die erfüllt sein müssen, um mit dieser API zu arbeiten: <ul<>li>Der Inhalt muss eine CBOR-codierte Struktur sein.</li li><>Die CBOR-Struktur muss eine Karte sein.</li Li><>Die Karte muss einen tstr-Schlüssel "nameSpaces" enthalten, dessen Wert eine Karte enthält, wie im folgenden Beispiel beschrieben.</li></ul>

Wenn diese Anforderungen nicht erfüllt sind, wird die InvalidRequestMessageException Ausnahme ausgelöst.

Hier ist ein Beispiel für CBOR, das dieser Anforderung entspricht:

ItemsRequest = {
                ? "docType" : DocType,
                "nameSpaces" : NameSpaces,
                ? "RequestInfo" : {* tstr => any} ; Additional info the reader wants to provide
              }

              DocType = tstr

              NameSpaces = {
                + NameSpace => DataElements    ; Requested data elements for each NameSpace
              }

              NameSpace = tstr

              DataElements = {
                + DataElement => IntentToRetain
              }

              DataElement = tstr
              IntentToRetain = bool

Wenn die Mdoc-Sitzungsverschlüsselung verwendet wird (z. B. wenn #createEphemeralKeyPair() er aufgerufen wurde) und wenn der sessionTranscript Parameter nicht nullangegeben ist, müssen die X- und Y-Koordinaten des öffentlichen Teils des zuvor generierten #createEphemeralKeyPair() Schlüsselpaars irgendwo in den Bytes des CBOR angezeigt werden. Jede dieser Koordinaten muss zuerst mit den wichtigsten Bits codiert angezeigt werden und die genaue Anzahl von Bits verwenden, die durch die Schlüsselgröße der kurzlebigen Tasten angegeben sind. Wenn beispielsweise der kurzlebige Schlüssel die P-256-Kurve verwendet, müssen die 32 Bytes für die X-Koordinate, die mit den wichtigsten Bits codiert ist, zuerst irgendwo in sessionTranscript und ditto für die 32 Bytes für die Y-Koordinate angezeigt werden.

Ist readerSignature dies nicht null der Name der Byte einer COSE_Sign1 Struktur, die in RFC 8152 definiert ist. Für die Nutzlast nil muss verwendet werden, und die losgelöste Nutzlast ist die unten beschriebene ReaderAuthenticationBytes CBOR.

ReaderAuthentication = [
                  "ReaderAuthentication",
                  SessionTranscript,
                  ItemsRequestBytes
                ]

                ItemsRequestBytes = #6.24(bstr .cbor ItemsRequest)

                ReaderAuthenticationBytes = #6.24(bstr .cbor ReaderAuthentication)

dabei ItemsRequestBytes handelt es sich um die Bytes im requestMessage Parameter.

Der öffentliche Schlüssel, der dem Schlüssel entspricht, der zum Erstellen der Signatur verwendet wird, finden Sie im x5chain ungeschützten Headerelement der COSE_Sign1 Struktur (wie in draft-ietf-cose-x509-04 beschrieben). Es wird mindestens ein Zertifikat in diesem Element geben, und es kann mehr geben (und wenn ja, muss jedes Zertifikat von seinem Nachfolger signiert werden).

Datenelemente, die durch die Leserauthentifizierung geschützt sind, werden zurückgegeben, wenn sie nur dann, wenn sie erwähnt requestMessagerequestMessage werden, von der obersten Zertifikatkette in der Zertifikatkette des Lesers signiert ist und das Datenelement mit einem AccessControlProfile konfigurierten X.509-Zertifikat konfiguriert ist, das in der Zertifikatkette angezeigt wird.

Beachten Sie, dass nur elemente zurückgegeben werden, auf entriesToRequest die verwiesen wird – der Parameter wird nur zum Erzwingen der requestMessage Leseauthentifizierung verwendet.

Der Grund für das Vorhandensein requestMessage und entriesToRequest als separate Parameter besteht darin, dass der frühere eine Anforderung vom Remoteprüfgerät (optional signiert) darstellt, und dies ermöglicht der Anwendung, die Anforderung zu filtern, um keine Datenelemente einzuschließen, die der Benutzer der Freigabe nicht zugestimmt hat.

Dieses Element ist veraltet. Verwenden Sie stattdessen PresentationSession.

Java Dokumentation für android.security.identity.IdentityCredential.getEntries(byte[], java.util.Map<java.lang.String, java.util.Collection<java.lang.String>>, byte[], byte[]).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: