我正在努力在golang中滚动OIDC服务器,并尝试使用angular-oauth2-oidc库here为angular 6客户端声明令牌。
我的服务器配置相当简单:
func main() {
...
// Register the four manditory OpenID Connect endpoints: discovery, public keys, auth, and token.
http.HandleFunc("/.well-known/openid-configuration", handleDiscovery)
http.HandleFunc("/identity/.well-known/openid-configuration", handleDiscovery)
http.HandleFunc("/publickeys", handlePublicKeys)
http.HandleFunc("/authorize", handleAuthorization)
http.HandleFunc("/token", handleToken)
// Load server TLS configuration for (selective) mutual auth
caCert, err := ioutil.ReadFile("ca.pem")
if err != nil {
log.Fatal(err)
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// Setup HTTPS client
tlsConfig := &tls.Config{
ClientCAs: caCertPool,
// NoClientCert
// RequestClientCert
// RequireAnyClientCert
// VerifyClientCertIfGiven
// RequireAndVerifyClientCert
ClientAuth: tls.VerifyClientCertIfGiven,
}
tlsConfig.BuildNameToCertificate()
s := &http.Server{
Addr: ":14001",
TLSConfig: tlsConfig,
}
// Some oauth2 / oidc configuration bits
server.Config.AllowedAccessTypes = osin.AllowedAccessType{osin.AUTHORIZATION_CODE,
osin.REFRESH_TOKEN, osin.PASSWORD, osin.CLIENT_CREDENTIALS, osin.ASSERTION}
server.Config.AllowedAuthorizeTypes = osin.AllowedAuthorizeType{osin.CODE, osin.TOKEN}
log.Fatal(s.ListenAndServeTLS("idp.pem", "idp-key.pem"))
}
我正在/authorize
路径上使用提供的客户端证书通过tls.PeerCertificates(在提供证书时效果很好)进行授权,但是,尝试访问时浏览器的行为却不一致通过我的角度应用程序的隐式流程。我的“应用程序”是一个非常简单的示例应用程序,我正尝试将其放在一起进行演示-它具有一个“登录”按钮,该按钮使用JavaScript的{{1}将浏览器重定向到OIDC /authorize
端点}功能。
据我所知,打开新的浏览器可能会发生以下两种情况之一:
我的测试和到目前为止看到的症状使我认为这是一个浏览器问题,可能与缓存有关,但是如果我在服务器中正在做(或不做)某事可能会解决此问题,那么这也将非常有帮助。