Implement Smartcard/CAC Authentication in GitLab
### Problem we're trying to solve
Add support for Smartcard (CaC) authentication via LDAP.
+ All major browsers support Smartcard authentication by forwarding the Smartcard certificate to the requested web server.
https://help.ubuntu.com/community/CommonAccessCard#Firefox
+ NGINX can be configured to forward a `ssl_client_certificate` from an attempted Smartcard authentication
http://geocentlabs.com/configure-nginx-for-ssl-with-dod-cac-authentication-on-centos-6-3/
GitLab could retrieve the Smartcard certificate from the request headers and verify this against a certificate stored in Active Directory (via LDAP).
### Additional information
See mediawiki implementation: https://www.mediawiki.org/wiki/Extension:LDAP_Authentication/Smartcard_Configuration_Examples
Adding to this issue to include any kind of access tokens (whether it be Smartcard authentication or PKI-based browser certs).
### Proposal
First iteration:
* Authenticating with a card with a single certificate, mapped to a single user. Create user if not found, or login with existing credentials if found.
* GitLab authentication only, no LDAP in this iteration.
* Omnibus package only.
We'll need additional issues for multi user/cert, LDAP, and other distros.
//cc @dblessing
____________
ZD: https://gitlab.zendesk.com/agent/tickets/28048
SFDC links:
https://gitlab.my.salesforce.com/0016100000W3JGF?srPos=0&srKp=003
https://gitlab.my.salesforce.com/0016100000SEhmS?srPos=0&srKp=003
https://gitlab.my.salesforce.com/0066100000JadmW
https://gitlab.my.salesforce.com/0066100000JYhNZ
https://gitlab.my.salesforce.com/0066100000LOwJN
https://gitlab.my.salesforce.com/0066100000LNBNL
https://gitlab.my.salesforce.com/0066100000LOkuy
https://gitlab.my.salesforce.com/0066100000KPun9
https://gitlab.my.salesforce.com/0066100000KxlKp
issue