---
# System prepended metadata

title: Mobile API 3rd-Party Authentication

---

Mobile API 3rd-Party Authentication
===

## Tjekliste efter kryptering er slået til

- jobindextest01@gmail.com
- [x] android/jobdk: Når man trykker på et autologin-link i en email, skifter den ikke til app'en, men når man manuelt skifter over til app'en, så har den aktiveret linket.


## Google

- [x] Antag at "google_token" er en "ID token" (`id_token`) eller en base64-encoded og ikke en "one-time key" (`code`).

- [x] Tjek at signaturen for "ID token" er korrekt
   > Kan vente til senere
   - I `JIX::Google::Login->decode_id_token($cred)` burde man tjekke en public key for at verificere at `$cred` er fra Google, selvom den modtages fra klienten. Kan ændres fra/til:

          JSON::WebToken->decode($cred->{id_token}, 'dummy_key', 0)

          JSON::WebToken->decode($cred->{id_token}, $public_key, 1)

     hvor `$public_key` ifølge `JSON::WebToken` og `JSON::WebToken::Crypt::RSA` skal være noget der kan puttes ind i [`Crypt::OpenSSL::RSA->new_public_key`](https://metacpan.org/pod/Crypt::OpenSSL::RSA#new_public_key):
     
     > Create a new `Crypt::OpenSSL::RSA` object by loading a public key in from a string containing Base64/DER-encoding of either the PKCS1 or X.509 representation of the key. The string should include the `-----BEGIN...-----` and `-----END...-----` lines.

   - [x] Sørg for at det er den rigtige public key som bruges (ikke expired, ikke for ny): Hent public key fra https://www.googleapis.com/oauth2/v3/certs 
   - [ ] cache den i så lang tid som den virker.
   - [x] Sørg for at det er den rigtige API key som bliver brugt (`%api_info`).

- [x] ~~Hent "token info" fra Google via "ID token" modtaget fra klient~~
   - ~~`get_tokeninfo` burde virke til det.~~

- [x] `$self->reply->jix_api_conflict` (409)

- [x] Brug purposed autologin i `send_external_login_verification_mail` så det kan gribes af app'en, hvis brugeren findes men ikke er knyttet til Google. Der returneres 409.
  - [x] Tilføj test af purposed autologin
  - [x] Tilføj autologin-navn i `/.well-known/apple-app-site-association`

- [x] Login flow:
   - [x] 400 hvis `$tokeninfo` ikke kan afkodes.
   - [x] 404 hvis bruger ikke findes endnu.
   - [x] 409 hvis bruger findes, men ikke er verificeret.
   - [x] 201 hvis bruger er verificeret.

- [x] Create user flow:
   - [x] 400 hvis `$tokeninfo` ikke kan afkodes.
   - [x] 202 hvis brugeren allerede findes.

Fejl:
 - [x] .well-known paths er pakket en gang for meget ind i arrays
 - [x] `email`-felt ikke nødvendigt med `*_token`-felt.
 - [x] De forkerte API keys bliver brugt (dem til websitet).
 - [x] Login med email uden andet fejler ikke med 400.

## Facebook

- [x] Antag at "facebook_token" er "access token" frem for "code" (Google "ID token" ~~ Facebook "access token")
- [x] `$fb->set_access_token($facebook_token)`

- [x] Login-flow:
   - [x] 400 hvis `$tokeninfo` ikke kan afkodes.
   - [x] 404 hvis bruger ikke findes endnu.
   - [x] 409 hvis bruger findes, men ikke er verificeret **(202 for nu)**.
   - [x] 201 hvis bruger er verificeret.
> hvad betyder **(202 for nu)**? [name=tri]