diff --git a/example/Keys.hs b/example/Keys.hs
--- a/example/Keys.hs
+++ b/example/Keys.hs
@@ -8,51 +8,50 @@
 import           URI.ByteString.QQ
 
 weiboKey :: OAuth2
-weiboKey = OAuth2 { oauthClientId = "1962132691"
-                  , oauthClientSecret = "a2ad30383bdff9bcb12be6a3d30deeb1"
-                  , oauthCallback = Just [uri|http://127.0.0.1:9988/oauth2/callback|]
-                  , oauthOAuthorizeEndpoint = [uri|https://api.weibo.com/oauth2/authorize|]
-                  , oauthAccessTokenEndpoint = [uri|https://api.weibo.com/oauth2/access_token|]
-                  }
+weiboKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthCallback = Just [uri|http://127.0.0.1:9988/oauthCallback|]
+                   , oauthOAuthorizeEndpoint = [uri|https://api.weibo.com/oauth2/authorize|]
+                   , oauthAccessTokenEndpoint = [uri|https://api.weibo.com/oauth2/access_token|]
+                   }
 
 -- | http://developer.github.com/v3/oauth/
 githubKey :: OAuth2
-githubKey = OAuth2 { oauthClientId = "bf86d338485a96a93c88"
-                   , oauthClientSecret = "a1c00dada665dc00aa6fafe0495c7c885f82d1ce"
-                   , oauthCallback = Just [uri|http://127.0.0.1:9988/oauth2/callback|]
-                   , oauthOAuthorizeEndpoint = [uri|https://github.com/login/oauth/authorize|]
-                   , oauthAccessTokenEndpoint = [uri|https://github.com/login/oauth/access_token|]
-                   }
+githubKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
+                    , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
+                    , oauthCallback = Just [uri|http://127.0.0.1:9988/githubCallback|]
+                    , oauthOAuthorizeEndpoint = [uri|https://github.com/login/oauth/authorize|]
+                    , oauthAccessTokenEndpoint = [uri|https://github.com/login/oauth/access_token|]
+                    }
 
 -- | oauthCallback = Just "https://developers.google.com/oauthplayground"
 googleKey :: OAuth2
-googleKey = OAuth2 { oauthClientId = "886894027376.apps.googleusercontent.com"
-                   , oauthClientSecret = "27w98gwGB1h8N5a6JQ2bT_nm"
-                   , oauthCallback = Just [uri|http://127.0.0.1:9988/oauth2/callback|]
+googleKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx.apps.googleusercontent.com"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthCallback = Just [uri|http://127.0.0.1:9988/googleCallback|]
                    , oauthOAuthorizeEndpoint = [uri|https://accounts.google.com/o/oauth2/auth|]
                    , oauthAccessTokenEndpoint = [uri|https://www.googleapis.com/oauth2/v3/token|]
                    }
 
-
 facebookKey :: OAuth2
-facebookKey = OAuth2 { oauthClientId = "414630782030965"
-                     , oauthClientSecret = "0e648eae100da4d03f16594f231fc1d0"
-                     , oauthCallback = Just [uri|http://127.0.0.1:9988/oauth2/callback|]
+facebookKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
+                     , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
+                     , oauthCallback = Just [uri|http://t.haskellcn.org/cb|]
                      , oauthOAuthorizeEndpoint = [uri|https://www.facebook.com/dialog/oauth|]
                      , oauthAccessTokenEndpoint = [uri|https://graph.facebook.com/v2.3/oauth/access_token|]
                      }
 
 doubanKey :: OAuth2
-doubanKey = OAuth2 { oauthClientId = "02a914cf299ca31607fb3e6d7cd5e942"
-                   , oauthClientSecret = "3c0fdef13b0dd271"
+doubanKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://localhost:9999/oauthCallback|]
                    , oauthOAuthorizeEndpoint = [uri|https://www.douban.com/service/auth2/auth|]
                    , oauthAccessTokenEndpoint = [uri|https://www.douban.com/service/auth2/token|]
                    }
 
 fitbitKey :: OAuth2
-fitbitKey = OAuth2 { oauthClientId = "229LN9"
-                   , oauthClientSecret = "2f4aa9a275c2d4bb9eb616efbd2c1311"
+fitbitKey = OAuth2 { oauthClientId = "xxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                    , oauthOAuthorizeEndpoint = [uri|https://www.fitbit.com/oauth2/authorize|]
                    , oauthAccessTokenEndpoint = [uri|https://api.fitbit.com/oauth2/token|]
@@ -64,24 +63,23 @@
 stackexchangeAppKey = "xxxxxx"
 
 stackexchangeKey :: OAuth2
-stackexchangeKey = OAuth2 { oauthClientId = "7185"
-                          , oauthClientSecret = "K5hK)ET*dbFGFmNFVtqIyA(("
+stackexchangeKey = OAuth2 { oauthClientId = "xx"
+                          , oauthClientSecret = Just "xxxxxxxxxxxxxxx"
                           , oauthCallback = Just [uri|http://c.haskellcn.org/cb|]
                           , oauthOAuthorizeEndpoint = [uri|https://stackexchange.com/oauth|]
                           , oauthAccessTokenEndpoint = [uri|https://stackexchange.com/oauth/access_token|]
                           }
-
 dropboxKey :: OAuth2
-dropboxKey = OAuth2 { oauthClientId = "zbyxxox19gz6dgg"
-                    , oauthClientSecret = "ihhui0ysp85oi8s"
+dropboxKey = OAuth2 { oauthClientId = "xxx"
+                    , oauthClientSecret = Just "xxx"
                     , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                     , oauthOAuthorizeEndpoint = [uri|https://www.dropbox.com/1/oauth2/authorize|]
                     , oauthAccessTokenEndpoint = [uri|https://api.dropboxapi.com/oauth2/token|]
                     }
 
 oktaKey :: OAuth2
-oktaKey = OAuth2 { oauthClientId = "0oad3popatwUIhWV40h7"
-                 , oauthClientSecret = "x4ycjti9-bM-dw848U9MJO77wUcF-0ToBxk_61rF"
+oktaKey = OAuth2 { oauthClientId = "xxx"
+                 , oauthClientSecret = Just "xxx"
                  , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                  , oauthOAuthorizeEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/authorize|]
                  , oauthAccessTokenEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/token|]
@@ -89,16 +87,16 @@
 
 azureADKey :: OAuth2
 azureADKey = OAuth2 { oauthClientId = "xxx"
-                    , oauthClientSecret = "xxx"
+                    , oauthClientSecret = Just "xxx"
                     , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                     , oauthOAuthorizeEndpoint = [uri|https://login.windows.net/common/oauth2/authorize|]
                     , oauthAccessTokenEndpoint = [uri|https://login.windows.net/common/oauth2/token|]
                     }
 
 zohoKey :: OAuth2
-zohoKey = OAuth2 { oauthClientId = "1000.U9JY0RDYUTMXCKKJFCCXL7V4QFCZ0H"
-                 , oauthClientSecret = "b6088b1a88b967be647512a63d986e043210af35a0"
-                 , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
-                     , oauthOAuthorizeEndpoint = [uri|https://accounts.zoho.com/oauth/v2/auth|]
-                 , oauthAccessTokenEndpoint = [uri|https://accounts.zoho.com/oauth/v2/token|]
-                 }
+zohoKey = OAuth2 { oauthClientId = "xxx"
+                    , oauthClientSecret = Just "xxx"
+                    , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
+                    , oauthOAuthorizeEndpoint = [uri|https://accounts.zoho.com/oauth/v2/auth|]
+                    , oauthAccessTokenEndpoint = [uri|https://accounts.zoho.com/oauth/v2/token|]
+                    }
diff --git a/example/Keys.hs.sample b/example/Keys.hs.sample
--- a/example/Keys.hs.sample
+++ b/example/Keys.hs.sample
@@ -9,7 +9,7 @@
 
 weiboKey :: OAuth2
 weiboKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
-                   , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://127.0.0.1:9988/oauthCallback|]
                    , oauthOAuthorizeEndpoint = [uri|https://api.weibo.com/oauth2/authorize|]
                    , oauthAccessTokenEndpoint = [uri|https://api.weibo.com/oauth2/access_token|]
@@ -18,7 +18,7 @@
 -- | http://developer.github.com/v3/oauth/
 githubKey :: OAuth2
 githubKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
-                    , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
+                    , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                     , oauthCallback = Just [uri|http://127.0.0.1:9988/githubCallback|]
                     , oauthOAuthorizeEndpoint = [uri|https://github.com/login/oauth/authorize|]
                     , oauthAccessTokenEndpoint = [uri|https://github.com/login/oauth/access_token|]
@@ -27,7 +27,7 @@
 -- | oauthCallback = Just "https://developers.google.com/oauthplayground"
 googleKey :: OAuth2
 googleKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx.apps.googleusercontent.com"
-                   , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://127.0.0.1:9988/googleCallback|]
                    , oauthOAuthorizeEndpoint = [uri|https://accounts.google.com/o/oauth2/auth|]
                    , oauthAccessTokenEndpoint = [uri|https://www.googleapis.com/oauth2/v3/token|]
@@ -35,7 +35,7 @@
 
 facebookKey :: OAuth2
 facebookKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
-                     , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
+                     , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                      , oauthCallback = Just [uri|http://t.haskellcn.org/cb|]
                      , oauthOAuthorizeEndpoint = [uri|https://www.facebook.com/dialog/oauth|]
                      , oauthAccessTokenEndpoint = [uri|https://graph.facebook.com/v2.3/oauth/access_token|]
@@ -43,7 +43,7 @@
 
 doubanKey :: OAuth2
 doubanKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
-                   , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://localhost:9999/oauthCallback|]
                    , oauthOAuthorizeEndpoint = [uri|https://www.douban.com/service/auth2/auth|]
                    , oauthAccessTokenEndpoint = [uri|https://www.douban.com/service/auth2/token|]
@@ -51,7 +51,7 @@
 
 fitbitKey :: OAuth2
 fitbitKey = OAuth2 { oauthClientId = "xxxxxx"
-                   , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+                   , oauthClientSecret = Just "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                    , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                    , oauthOAuthorizeEndpoint = [uri|https://www.fitbit.com/oauth2/authorize|]
                    , oauthAccessTokenEndpoint = [uri|https://api.fitbit.com/oauth2/token|]
@@ -64,14 +64,14 @@
 
 stackexchangeKey :: OAuth2
 stackexchangeKey = OAuth2 { oauthClientId = "xx"
-                          , oauthClientSecret = "xxxxxxxxxxxxxxx"
+                          , oauthClientSecret = Just "xxxxxxxxxxxxxxx"
                           , oauthCallback = Just [uri|http://c.haskellcn.org/cb|]
                           , oauthOAuthorizeEndpoint = [uri|https://stackexchange.com/oauth|]
                           , oauthAccessTokenEndpoint = [uri|https://stackexchange.com/oauth/access_token|]
                           }
 dropboxKey :: OAuth2
 dropboxKey = OAuth2 { oauthClientId = "xxx"
-                    , oauthClientSecret = "xxx"
+                    , oauthClientSecret = Just "xxx"
                     , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                     , oauthOAuthorizeEndpoint = [uri|https://www.dropbox.com/1/oauth2/authorize|]
                     , oauthAccessTokenEndpoint = [uri|https://api.dropboxapi.com/oauth2/token|]
@@ -79,7 +79,7 @@
 
 oktaKey :: OAuth2
 oktaKey = OAuth2 { oauthClientId = "xxx"
-                 , oauthClientSecret = "xxx"
+                 , oauthClientSecret = Just "xxx"
                  , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                  , oauthOAuthorizeEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/authorize|]
                  , oauthAccessTokenEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/token|]
@@ -87,7 +87,7 @@
 
 azureADKey :: OAuth2
 azureADKey = OAuth2 { oauthClientId = "xxx"
-                    , oauthClientSecret = "xxx"
+                    , oauthClientSecret = Just "xxx"
                     , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                     , oauthOAuthorizeEndpoint = [uri|https://login.windows.net/common/oauth2/authorize|]
                     , oauthAccessTokenEndpoint = [uri|https://login.windows.net/common/oauth2/token|]
@@ -95,7 +95,7 @@
 
 zohoKey :: OAuth2
 zohoKey = OAuth2 { oauthClientId = "xxx"
-                    , oauthClientSecret = "xxx"
+                    , oauthClientSecret = Just "xxx"
                     , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]
                     , oauthOAuthorizeEndpoint = [uri|https://accounts.zoho.com/oauth/v2/auth|]
                     , oauthAccessTokenEndpoint = [uri|https://accounts.zoho.com/oauth/v2/token|]
diff --git a/hoauth2.cabal b/hoauth2.cabal
--- a/hoauth2.cabal
+++ b/hoauth2.cabal
@@ -1,7 +1,7 @@
 Cabal-version: 2.4
 Name:                hoauth2
 -- http://wiki.haskell.org/Package_versioning_policy
-Version:             1.10.2
+Version:             1.11.0
 
 Synopsis:            Haskell OAuth2 authentication client
 
diff --git a/src/Network/OAuth/OAuth2/HttpClient.hs b/src/Network/OAuth/OAuth2/HttpClient.hs
--- a/src/Network/OAuth/OAuth2/HttpClient.hs
+++ b/src/Network/OAuth/OAuth2/HttpClient.hs
@@ -63,9 +63,8 @@
                    -> IO (OAuth2Result TR.Errors OAuth2Token) -- ^ Access Token
 fetchAccessToken2 mgr oa code = do
   let (url, body1) = accessTokenUrl oa code
-  let extraBody = [ ("client_id", T.encodeUtf8 $ oauthClientId oa)
-                  , ("client_secret", T.encodeUtf8 $ oauthClientSecret oa)
-                  ]
+  let secret x = [("client_secret", T.encodeUtf8 x)]
+  let extraBody = ("client_id", T.encodeUtf8 $ oauthClientId oa) : maybe [] secret (oauthClientSecret oa)
   doJSONPostRequest mgr oa url (extraBody ++ body1)
 
 -- | Fetch a new AccessToken with the Refresh Token with authentication in request header.
@@ -91,9 +90,8 @@
                      -> IO (OAuth2Result TR.Errors OAuth2Token)
 refreshAccessToken2 manager oa token = do
   let (uri, body) = refreshAccessTokenUrl oa token
-  let extraBody = [ ("client_id", T.encodeUtf8 $ oauthClientId oa)
-                  , ("client_secret", T.encodeUtf8 $ oauthClientSecret oa)
-                  ]
+  let secret x = [("client_secret", T.encodeUtf8 x)]
+  let extraBody = ("client_id", T.encodeUtf8 $ oauthClientId oa) : maybe [] secret (oauthClientSecret oa)
   doJSONPostRequest manager oa uri (extraBody ++ body)
 
 -- | Conduct post request and return response as JSON.
@@ -114,7 +112,9 @@
 doSimplePostRequest manager oa url body = fmap handleOAuth2TokenResponse go
                                   where go = do
                                              req <- uriToRequest url
-                                             let addBasicAuth = applyBasicAuth (T.encodeUtf8 $ oauthClientId oa) (T.encodeUtf8 $ oauthClientSecret oa)
+                                             let addBasicAuth = case oauthClientSecret oa of
+                                                   (Just secret) -> applyBasicAuth (T.encodeUtf8 $ oauthClientId oa) (T.encodeUtf8 secret)
+                                                   Nothing -> id
                                                  req' = (addBasicAuth . updateRequestHeaders Nothing) req
                                              httpLbs (urlEncodedBody body req') manager
 
diff --git a/src/Network/OAuth/OAuth2/Internal.hs b/src/Network/OAuth/OAuth2/Internal.hs
--- a/src/Network/OAuth/OAuth2/Internal.hs
+++ b/src/Network/OAuth/OAuth2/Internal.hs
@@ -37,7 +37,7 @@
 -- | Query Parameter Representation
 data OAuth2 = OAuth2 {
       oauthClientId            :: Text
-    , oauthClientSecret        :: Text
+    , oauthClientSecret        :: Maybe Text
     , oauthOAuthorizeEndpoint  :: URI
     , oauthAccessTokenEndpoint :: URI
     , oauthCallback            :: Maybe URI
