linux-credentials / linux-credentials/credentialsd
Add DiscoverCredentials method
Nessuno ha ancora preso questa issue.
- Lingua principale
- Rust
- Stelle
- 259
- Fork
- 19
- Merge medio
- 1g 2h
- PR unite (30g)
- 12
Descrizione
In order to support autofill scenarios, we need to provide a method that allows a user to silently discover the existence of credentials.
Some considerations on the design:
- should we allow cross-origin requests (probably specific to credential type)? Is that even meaningful?
- what data should we return?
Prior art
WebAuthn
DiscoverableCredentialMetadata includes the following fields:
{
"type": "public-key",
"id": "credentialID",
"rpId": "example.com"
"userHandle": "abcdefghi1n",
"otherUI": ??
}
Android
I have no idea how Android allows browsers to do credential discovery.
docs
Apple
Browser API:
platformCredentials(
forRelyingParty relyingParty: String
) async -> [ASAuthorizationWebBrowserPlatformPublicKeyCredential]
struct ASAuthorizationWebBrowserPlatformPublicKeyCredential {
/// A string the person can supply to describe this credential.
let customTitle: String
/// The user name for the account associated with this credential.
let name: String
/// The name of the app that manages this credential, or “iCloud Keychain” if it’s the operating system.
let providerName: String
/// The relying party that issues challenges for this credential.
let relyingParty: String
/// A unique identifier for the user account at the relying party.
let userHandle: Data
/// The identifier the operating system uses for this credential.
let credentialID: Data
}
Returns metadata for passkey. Returns credential ID, RP ID, user ID, user name and provider name.
Credential provider side:
ASCredentialProviderViewController.prepareCredentialList(
for: [ASCredentialServiceIdentifier],
requestParameters: ASPasskeyCredentialRequestParameters
)
Receives a list of "service identifiers" (URL, domain or app ID), which the credential provider should use to pull up a list of for display.
Windows
typedef struct _WEBAUTHN_CREDENTIAL_DETAILS {
// Version of this structure, to allow for modifications in the future.
DWORD dwVersion;
// Size of pbCredentialID.
DWORD cbCredentialID;
_Field_size_bytes_(cbCredentialID)
PBYTE pbCredentialID;
// RP Info
PWEBAUTHN_RP_ENTITY_INFORMATION pRpInformation;
// User Info
PWEBAUTHN_USER_ENTITY_INFORMATION pUserInformation;
// Removable or not.
BOOL bRemovable;
//
// The following fields have been added in WEBAUTHN_CREDENTIAL_DETAILS_VERSION_2
//
// Backed Up or not.
BOOL bBackedUp;
//
// The following fields have been added in WEBAUTHN_CREDENTIAL_DETAILS_VERSION_3
//
PCWSTR pwszAuthenticatorName;
// The logo is expected to be in the svg format
DWORD cbAuthenticatorLogo;
_Field_size_bytes_(cbAuthenticatorLogo)
PBYTE pbAuthenticatorLogo;
// ThirdPartyPayment Credential or not.
BOOL bThirdPartyPayment;
//
// The following fields have been added in WEBAUTHN_CREDENTIAL_DETAILS_VERSION_4
//
// Applicable Transports
DWORD dwTransports;
} WEBAUTHN_CREDENTIAL_DETAILS, *PWEBAUTHN_CREDENTIAL_DETAILS;
typedef const WEBAUTHN_CREDENTIAL_DETAILS *PCWEBAUTHN_CREDENTIAL_DETAILS;
typedef struct _WEBAUTHN_GET_CREDENTIALS_OPTIONS {
// Version of this structure, to allow for modifications in the future.
DWORD dwVersion;
// Optional.
LPCWSTR pwszRpId;
// Optional. BrowserInPrivate Mode. Defaulting to FALSE.
BOOL bBrowserInPrivateMode;
} WEBAUTHN_GET_CREDENTIALS_OPTIONS, *PWEBAUTHN_GET_CREDENTIALS_OPTIONS;
typedef const WEBAUTHN_GET_CREDENTIALS_OPTIONS *PCWEBAUTHN_GET_CREDENTIALS_OPTIONS;
HRESULT
WINAPI
WebAuthNGetPlatformCredentialList(
_In_ PCWEBAUTHN_GET_CREDENTIALS_OPTIONS pGetCredentialsOptions,
_Outptr_result_maybenull_ PWEBAUTHN_CREDENTIAL_DETAILS_LIST *ppCredentialDetailsList);
Allows retrieving credential metadata by RP ID, with flag for browser private mode. Returns credential ID, RP ID, user ID and other information.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Nell'issue non sono indicati né un file sorgente né un test. Inizia esaminando i riferimenti a WebAuthn silent-discovery e le API delle credenziali di Android, Apple e Windows citate qui, quindi determina le regole cross-origin, i metadati restituiti e il contratto del metodo D-Bus; il lavoro è completato quando queste questioni di progettazione sono risolte nella DiscoverCredentials API proposta.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- linux, rust
- Ambito
- api, authentication, security
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100