initial commit
This commit is contained in:
.gitignoreMakefile
cmd
connector
example
glide.lockglide.yamlglide_test.goserver
doc.gohandlers.gohandlers_test.gooauth2.gooauth2_test.gorotation.gorotation_test.goserver.goserver_test.gotemplates.gotemplates_test.go
storage
doc.go
kubernetes
memory
storage.gostoragetest
vendor
github.com
ericchiang
oidc
LICENSEREADME.mddoc.go
examples
internal
jwks.gojwks_test.gononce.gooidc.gooidc_test.gooidcproxy
testdata
golang
protobuf
.gitignoreAUTHORSCONTRIBUTORSLICENSEMake.protobufMakefileREADME.md
jsonpb
proto
Makefileall_test.goany_test.goclone.goclone_test.godecode.goencode.goequal.goequal_test.goextensions.goextensions_test.golib.gomessage_set.gomessage_set_test.gopointer_reflect.gopointer_unsafe.goproperties.go
proto3_proto
proto3_test.gosize2_test.gosize_test.gotestdata
text.gotext_parser.gotext_parser_test.gotext_test.goprotoc-gen-go
ptypes
gorilla
context
mux
gtank
cryptopasta
inconshreveable
mitchellh
pquerna
cachecontrol
spf13
cobra
.gitignore.mailmap.travis.ymlLICENSE.txtREADME.mdbash_completions.gobash_completions.mdbash_completions_test.gocobra.go
cobra
cobra_test.gocommand.gocommand_notwin.gocommand_test.gocommand_win.godoc
pflag
.travis.ymlLICENSEREADME.mdbool.gobool_test.gocount.gocount_test.goduration.goexample_test.goexport_test.goflag.goflag_test.gofloat32.gofloat64.gogolangflag.gogolangflag_test.goint.goint32.goint64.goint8.goint_slice.goint_slice_test.goip.goip_test.goipmask.goipnet.goipnet_test.gostring.gostring_slice.gostring_slice_test.gouint.gouint16.gouint32.gouint64.gouint8.go
verify
golang.org
x
crypto
.gitattributes.gitignoreAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEPATENTSREADME
acme
internal
bcrypt
blowfish
bn256
cast5
codereview.cfgcurve25519
const_amd64.scswap_amd64.scurve25519.gocurve25519_test.godoc.gofreeze_amd64.sladderstep_amd64.smont25519_amd64.gomul_amd64.ssquare_amd64.s
ed25519
hkdf
md4
nacl
ocsp
openpgp
armor
canonical_text.gocanonical_text_test.goclearsign
elgamal
errors
keys.gokeys_test.gopacket
compressed.gocompressed_test.goconfig.goencrypted_key.goencrypted_key_test.goliteral.goocfb.goocfb_test.goone_pass_signature.goopaque.goopaque_test.gopacket.gopacket_test.goprivate_key.goprivate_key_test.gopublic_key.gopublic_key_test.gopublic_key_v3.gopublic_key_v3_test.goreader.gosignature.gosignature_test.gosignature_v3.gosignature_v3_test.gosymmetric_key_encrypted.gosymmetric_key_encrypted_test.gosymmetrically_encrypted.gosymmetrically_encrypted_test.gouserattribute.gouserattribute_test.gouserid.gouserid_test.go
read.goread_test.gos2k
write.gowrite_test.gootr
pbkdf2
pkcs12
bmp-string.gobmp-string_test.gocrypto.gocrypto_test.goerrors.go
internal
mac.gomac_test.gopbkdf.gopbkdf_test.gopkcs12.gopkcs12_test.gosafebags.gopoly1305
const_amd64.spoly1305.gopoly1305_amd64.spoly1305_arm.spoly1305_test.gosum_amd64.gosum_arm.gosum_ref.go
ripemd160
salsa20
scrypt
sha3
doc.gohashes.gokeccakf.goregister.gosha3.gosha3_test.goshake.go
testdata
xor.goxor_generic.goxor_unaligned.gossh
agent
client.goclient_test.goexample_test.goforward.gokeyring.gokeyring_test.goserver.goserver_test.gotestdata_test.go
benchmark_test.gobuffer.gobuffer_test.gocerts.gocerts_test.gochannel.gocipher.gocipher_test.goclient.goclient_auth.goclient_auth_test.goclient_test.gocommon.goconnection.godoc.goexample_test.gohandshake.gohandshake_test.gokex.gokex_test.gokeys.gokeys_test.gomac.gomempipe_test.gomessages.gomessages_test.gomux.gomux_test.goserver.gosession.gosession_test.gotcpip.gotcpip_test.goterminal
test
agent_unix_test.gocert_test.godoc.goforward_unix_test.gosession_test.gotcpip_test.gotest_unix_test.gotestdata_test.go
testdata
testdata_test.gotransport.gotransport_test.gotea
twofish
xtea
xts
net
.gitattributes.gitignoreAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEPATENTSREADME
bpf
codereview.cfgcontext
dict
html
atom
charset
const.godoc.godoctype.goentity.goentity_test.goescape.goescape_test.goexample_test.goforeign.gonode.gonode_test.goparse.goparse_test.gorender.gorender_test.gotestdata
go1.html
token.gotoken_test.gowebkit
READMEadoption01.datadoption02.datcomments01.datdoctype01.datentities01.datentities02.dathtml5test-com.datinbody01.datisindex.datpending-spec-changes-plain-text-unsafe.datpending-spec-changes.datplain-text-unsafe.datscriptdata01.dat
scripted
tables01.dattests1.dattests10.dattests11.dattests12.dattests14.dattests15.dattests16.dattests17.dattests18.dattests19.dattests2.dattests20.dattests21.dattests22.dattests23.dattests24.dattests25.dattests26.dattests3.dattests4.dattests5.dattests6.dattests7.dattests8.dattests9.dattests_innerHTML_1.dattricky01.datwebkit01.datwebkit02.dathttp2
.gitignoreDockerfileMakefileREADMEclient_conn_pool.goconfigure_transport.goerrors.goerrors_test.gofixed_buffer.gofixed_buffer_test.goflow.goflow_test.goframe.goframe_test.gogo16.gogo17.gogotrack.gogotrack_test.go
h2demo
h2i
headermap.gohpack
http2.gohttp2_test.gonot_go16.gonot_go17.gopipe.gopipe_test.gopriority_test.goserver.goserver_test.gotestdata
transport.gotransport_test.gowrite.gowritesched.goz_spec_test.goicmp
dstunreach.goecho.goendpoint.goexample_test.goextension.goextension_test.gohelper.gohelper_posix.gointerface.goipv4.goipv4_test.goipv6.golisten_posix.golisten_stub.gomessage.gomessage_test.gomessagebody.gompls.gomultipart.gomultipart_test.gopackettoobig.goparamprob.goping_test.gosys_freebsd.gotimeexceeded.go
idna
internal
iana
nettest
error_posix.goerror_stub.gointerface.gorlimit.gorlimit_stub.gorlimit_unix.gorlimit_windows.gostack.gostack_stub.gostack_unix.gostack_windows.go
timeseries
ipv4
bpf_test.gobpfopt_linux.gobpfopt_stub.gocontrol.gocontrol_bsd.gocontrol_pktinfo.gocontrol_stub.gocontrol_unix.gocontrol_windows.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_linux.godefs_netbsd.godefs_openbsd.godefs_solaris.godgramopt_posix.godgramopt_stub.godoc.goendpoint.goexample_test.gogen.gogenericopt_posix.gogenericopt_stub.goheader.goheader_test.gohelper.gohelper_stub.gohelper_unix.gohelper_windows.goiana.goicmp.goicmp_linux.goicmp_stub.goicmp_test.gomocktransponder_test.gomulticast_test.gomulticastlistener_test.gomulticastsockopt_test.gopacket.gopayload.gopayload_cmsg.gopayload_nocmsg.goreadwrite_test.gosockopt.gosockopt_asmreq.gosockopt_asmreq_stub.gosockopt_asmreq_unix.gosockopt_asmreq_windows.gosockopt_asmreqn_stub.gosockopt_asmreqn_unix.gosockopt_ssmreq_stub.gosockopt_ssmreq_unix.gosockopt_stub.gosockopt_unix.gosockopt_windows.gosys_bsd.gosys_darwin.gosys_freebsd.gosys_linux.gosys_openbsd.gosys_stub.gosys_windows.gosyscall_linux_386.gosyscall_unix.gothunk_linux_386.sunicast_test.gounicastsockopt_test.gozsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_linux_386.gozsys_linux_amd64.gozsys_linux_arm.gozsys_linux_arm64.gozsys_linux_mips64.gozsys_linux_mips64le.gozsys_linux_ppc64.gozsys_linux_ppc64le.gozsys_linux_s390x.gozsys_netbsd.gozsys_openbsd.gozsys_solaris.go
ipv6
bpf_test.gobpfopt_linux.gobpfopt_stub.gocontrol.gocontrol_rfc2292_unix.gocontrol_rfc3542_unix.gocontrol_stub.gocontrol_unix.gocontrol_windows.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_linux.godefs_netbsd.godefs_openbsd.godefs_solaris.godgramopt_posix.godgramopt_stub.godoc.goendpoint.goexample_test.gogen.gogenericopt_posix.gogenericopt_stub.goheader.goheader_test.gohelper.gohelper_stub.gohelper_unix.gohelper_windows.goiana.goicmp.goicmp_bsd.goicmp_linux.goicmp_solaris.goicmp_stub.goicmp_test.goicmp_windows.gomocktransponder_test.gomulticast_test.gomulticastlistener_test.gomulticastsockopt_test.gopayload.gopayload_cmsg.gopayload_nocmsg.goreadwrite_test.gosockopt.gosockopt_asmreq_unix.gosockopt_asmreq_windows.gosockopt_ssmreq_stub.gosockopt_ssmreq_unix.gosockopt_stub.gosockopt_test.gosockopt_unix.gosockopt_windows.gosys_bsd.gosys_darwin.gosys_freebsd.gosys_linux.gosys_stub.gosys_windows.gosyscall_linux_386.gosyscall_unix.gothunk_linux_386.sunicast_test.gounicastsockopt_test.gozsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_linux_386.gozsys_linux_amd64.gozsys_linux_arm.gozsys_linux_arm64.gozsys_linux_mips64.gozsys_linux_mips64le.gozsys_linux_ppc64.gozsys_linux_ppc64le.gozsys_linux_s390x.gozsys_netbsd.gozsys_openbsd.gozsys_solaris.go
lex
httplex
netutil
proxy
publicsuffix
route
address.goaddress_darwin_test.goaddress_test.gobinary.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_netbsd.godefs_openbsd.gointerface.gointerface_announce.gointerface_classic.gointerface_freebsd.gointerface_multicast.gointerface_openbsd.gomessage.gomessage_darwin_test.gomessage_freebsd_test.gomessage_test.goroute.goroute_classic.goroute_openbsd.goroute_test.gosys.gosys_darwin.gosys_dragonfly.gosys_freebsd.gosys_netbsd.gosys_openbsd.gosyscall.gosyscall.szsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_netbsd.gozsys_openbsd.go
trace
webdav
file.gofile_test.goif.goif_test.golitmus_test_server.golock.golock_test.goprop.goprop_test.gowebdav.gowebdav_test.goxml.goxml_test.go
internal
xml
websocket
client.goexampledial_test.goexamplehandler_test.gohybi.gohybi_test.goserver.gowebsocket.gowebsocket_test.go
xsrftoken
oauth2
.travis.ymlAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEREADME.md
bitbucket
client_appengine.goclientcredentials
example_test.gofacebook
fitbit
github
google
appengine.goappengine_hook.goappenginevm_hook.godefault.goexample_test.gogoogle.gogoogle_test.gojwt.gojwt_test.gosdk.gosdk_test.go
testdata
gcloud
hipchat
internal
jws
jwt
linkedin
microsoft
oauth2.gooauth2_test.goodnoklassniki
paypal
slack
token.gotoken_test.gotransport.gotransport_test.govk
google.golang.org
appengine
.travis.ymlLICENSEREADME.mderrors.go
aetest
appengine.goappengine_test.goappengine_vm.goblobstore
capability
channel
cloudsql
cmd
datastore
datastore.godatastore_test.godoc.gokey.gokey_test.goload.gometadata.goprop.goprop_test.goquery.goquery_test.gosave.gotime_test.gotransaction.go
delay
demos
guestbook
helloworld
file
identity.goimage
internal
aetesting
api.goapi_classic.goapi_common.goapi_race_test.goapi_test.goapp_id.goapp_id_test.goapp_identity
base
blobstore
capability
channel
datastore
identity.goidentity_classic.goidentity_vm.goimage
internal.gointernal_test.golog
mail
memcache
metadata.gomodules
net.gonet_test.goregen.shremote_api
search
socket
system
taskqueue
transaction.gourlfetch
user
xmpp
log
mail
memcache
module
namespace.gonamespace_test.goremote_api
runtime
search
socket
taskqueue
timeout.gourlfetch
user
xmpp
gopkg.in
asn1-ber.v1
.travis.ymlLICENSEREADME.mdber.gober_test.gocontent_int.goheader.goheader_test.goidentifier.goidentifier_test.golength.golength_test.gosuite_test.go
tests
tc1.bertc10.bertc11.bertc12.bertc13.bertc14.bertc15.bertc16.bertc17.bertc18.bertc19.bertc2.bertc20.bertc21.bertc22.bertc23.bertc24.bertc25.bertc26.bertc27.bertc28.bertc29.bertc3.bertc30.bertc31.bertc32.bertc33.bertc34.bertc35.bertc36.bertc37.bertc38.bertc39.bertc4.bertc40.bertc41.bertc42.bertc43.bertc44.bertc45.bertc46.bertc47.bertc48.bertc5.bertc6.bertc7.bertc8.bertc9.ber
util.goldap.v2
.gitignore.travis.ymlLICENSEREADME.mdadd.gobind.goclient.gocompare.goconn.goconn_test.gocontrol.godebug.godel.godn.godn_test.godoc.goerror.goerror_test.goexample_test.gofilter.gofilter_test.goldap.goldap_test.gomodify.gopasswdmodify.gosearch.gosearch_test.go
square
go-jose.v1
.gitcookies.sh.enc.gitignore.travis.ymlBUG-BOUNTY.mdCONTRIBUTING.mdLICENSEREADME.mdasymmetric.goasymmetric_test.go
cipher
cbc_hmac.gocbc_hmac_test.goconcat_kdf.goconcat_kdf_test.goecdh_es.goecdh_es_test.gokey_wrap.gokey_wrap_test.go
crypter.gocrypter_test.godoc.godoc_test.goencoding.goencoding_test.gojose-util
json
LICENSEREADME.mdbench_test.godecode.godecode_test.goencode.goencode_test.goindent.gonumber_test.goscanner.goscanner_test.gostream.gostream_test.gotagkey_test.gotags.gotags_test.go
json_fork.gojson_fork_test.gojson_std.gojson_std_test.gojwe.gojwe_test.gojwk.gojwk_test.gojws.gojws_test.goshared.gosigning.gosigning_test.gosymmetric.gosymmetric_test.goutils.goutils_test.gotestdata
go-jose.v2
.gitcookies.sh.enc.gitignore.travis.ymlBUG-BOUNTY.mdCONTRIBUTING.mdLICENSEREADME.mdasymmetric.goasymmetric_test.go
cipher
cbc_hmac.gocbc_hmac_test.goconcat_kdf.goconcat_kdf_test.goecdh_es.goecdh_es_test.gokey_wrap.gokey_wrap_test.go
crypter.gocrypter_test.godoc.godoc_test.goencoding.goencoding_test.gojose-util
json
LICENSEREADME.mdbench_test.godecode.godecode_test.goencode.goencode_test.goindent.gonumber_test.goscanner.goscanner_test.gostream.gostream_test.gotagkey_test.gotags.gotags_test.go
json_fork.gojson_fork_test.gojson_std.gojson_std_test.gojwe.gojwe_test.gojwk.gojwk_test.gojws.gojws_test.gotestdata
jwt
shared.gosigning.gosigning_test.gosymmetric.gosymmetric_test.goutils_test.goyaml.v2
version
145
vendor/github.com/ericchiang/oidc/doc.go
generated
vendored
Normal file
145
vendor/github.com/ericchiang/oidc/doc.go
generated
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
Package oidc implements OpenID Connect client logic for the golang.org/x/oauth2 package.
|
||||
|
||||
provider, err := oidc.NewProvider(ctx, "https://accounts.example.com")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Configure an OpenID Connect aware OAuth2 client.
|
||||
oauth2Config := oauth2.Config{
|
||||
ClientID: clientID,
|
||||
ClientSecret: clientSecret,
|
||||
RedirectURL: redirectURL,
|
||||
Endpoint: provider.Endpoint(),
|
||||
Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
|
||||
}
|
||||
|
||||
OAuth2 redirects are unchanged.
|
||||
|
||||
func handleRedirect(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r, oauth2Config.AuthCodeURL(state), http.StatusFound)
|
||||
})
|
||||
|
||||
For callbacks the provider can be used to query for user information such as email.
|
||||
|
||||
func handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
|
||||
// Verify state...
|
||||
|
||||
oauth2Token, err := oauth2Config.Exchange(ctx, r.URL.Query().Get("code"))
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to exchange token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
userinfo, err := provider.UserInfo(ctx, oauth2.StaticTokenSource(oauth2Token))
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to get userinfo: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// ...
|
||||
})
|
||||
|
||||
The provider also has the ability to verify ID Tokens.
|
||||
|
||||
verifier := provider.NewVerifier(ctx)
|
||||
|
||||
The returned verifier can be used to perform basic validation on ID Token issued by the provider,
|
||||
including verifying the JWT signature. It then returns the payload.
|
||||
|
||||
func handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
|
||||
// Verify state...
|
||||
|
||||
oauth2Token, err := oauth2Config.Exchange(ctx, r.URL.Query().Get("code"))
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to exchange token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Extract the ID Token from oauth2 token.
|
||||
rawIDToken, ok := oauth2Token.Extra("id_token").(string)
|
||||
if !ok {
|
||||
http.Error(w, "No ID Token found", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Verify that the ID Token is signed by the provider.
|
||||
payload, err := verifier.Verify(rawIDToken)
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to verify ID Token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Unmarshal ID Token for expected custom claims.
|
||||
var idToken struct {
|
||||
Email string `json:"email"`
|
||||
EmailVerified bool `json:"email_verified"`
|
||||
}
|
||||
if err := json.Unmarshal(payload, &idToken); err != nil {
|
||||
http.Error(w, "Failed to unmarshal ID Token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// ...
|
||||
})
|
||||
|
||||
ID Token nonces are supported.
|
||||
|
||||
First, provide a nonce source for nonce validation. This will then be used to wrap the existing
|
||||
provider ID Token verifier.
|
||||
|
||||
// A verifier which boths verifies the ID Token signature and nonce.
|
||||
nonceEnabledVerifier := provider.NewVerifier(ctx, oidc.VerifyNonce(nonceSource))
|
||||
|
||||
For the redirect provide a nonce auth code option. This will be placed as a URL parameter during
|
||||
the client redirect.
|
||||
|
||||
func handleRedirect(w http.ResponseWriter, r *http.Request) {
|
||||
nonce, err := newNonce()
|
||||
if err != nil {
|
||||
// ...
|
||||
}
|
||||
// Provide a nonce for the OpenID Connect ID Token.
|
||||
http.Redirect(w, r, oauth2Config.AuthCodeURL(state, oidc.Nonce(nonce)), http.StatusFound)
|
||||
})
|
||||
|
||||
The nonce enabled verifier can then be used to verify the nonce while unpacking the ID Token.
|
||||
|
||||
func handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
|
||||
// Verify state...
|
||||
|
||||
oauth2Token, err := oauth2Config.Exchange(ctx, r.URL.Query().Get("code"))
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to exchange token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Extract the ID Token from oauth2 token.
|
||||
rawIDToken, ok := oauth2Token.Extra("id_token").(string)
|
||||
if !ok {
|
||||
http.Error(w, "No ID Token found", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Verify that the ID Token is signed by the provider and verify the nonce.
|
||||
payload, err := nonceEnabledVerifier.Verify(rawIDToken)
|
||||
if err != nil {
|
||||
http.Error(w, "Failed to verify ID Token: "+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Continue as above...
|
||||
})
|
||||
|
||||
This package uses contexts to derive HTTP clients in the same way as the oauth2 package. To configure
|
||||
a custom client, use the oauth2 packages HTTPClient context key when constructing the context.
|
||||
|
||||
myClient := &http.Client{}
|
||||
|
||||
myCtx := context.WithValue(parentCtx, oauth2.HTTPClient, myClient)
|
||||
|
||||
// NewProvider will use myClient to make the request.
|
||||
provider, err := oidc.NewProvider(myCtx, "https://accounts.example.com")
|
||||
*/
|
||||
package oidc
|
Reference in New Issue
Block a user