2017-02-12 362 views
1

我們使用Spring接受OAuth令牌生成,它接受用戶名/密碼/ ClientId/Secret,這非常完美。對於外部客戶端,我們只需輸入用戶名和密碼並生成OAuth令牌。沒有ClientId和ClientSecret的外部客戶端的Spring OAuth2令牌

<security:http pattern="/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <!-- include this only if you need to authenticate clients via request parameters --> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

下面是我們需要添加的新代碼,但它是在瀏覽器中要求用戶名和密碼。

<security:http pattern="/**external**/oauth/token" create-session="stateless" 
     authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
     <security:intercept-url pattern="/external/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
     <security:anonymous enabled="false" /> 
    <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
     <security:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <security:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    </security:http> 

請指導我們是否可以在沒有clientId的情況下生成OAuth並在內部傳遞clientId以生成OAuth。

回答

1

如果沒有clientId,您永遠無法生成OAuth令牌! Oauth2有三種創建令牌,Implicit,Code和user/pass的方式。應該避免使用最後一個,因爲這意味着Oauth客戶端將訪問用戶的憑證,並且構建OAuth以防止出現這種情況。隱式令牌僅使用用戶的憑據(通常只涉及瀏覽器)授予。在代碼模式下,OAuth客戶端收到一個代碼(不應該在瀏覽器中),然後交換到令牌。令牌交換的代碼要求Oauth客戶端使用它的clientId和一個祕密進行身份驗證,這通常是使用基本身份驗證完成的。

+0

同意你的觀點,但我想實現的是使用內部傳遞的clientId生成令牌,其中用戶只通過spring security xml配置傳遞用戶名和密碼。 – Rahul

+0

您是否在談論發佈隱式令牌?通過隱式授予,Oauth客戶端將把用戶的瀏覽器重定向到服務器上的/ oauth/authorize。該URL受到保護,因此瀏覽器被重定向到登錄頁面,用戶使用基於表單的身份驗證進行身份驗證。登錄後,瀏覽器將顯示批准頁面,用戶r批准/拒絕clientId標識的應用程序的訪問。 OAuth客戶端不應該看到憑據,只有受信任的OAuth服務器應該,否則不需要使用OAuth。 –

0

我想你需要的是這是在https://tools.ietf.org/html/rfc6749#section-1.3.3

資源所有者密碼交付式解釋應該只與可信客戶機使用的資源所有者密碼交付式。因此,如果您所說的外部客戶端是可信的客戶端(如同一家公司開發的原生移動應用程序,例如Facebook Mobile App),則可以使用該客戶端。

流在https://tools.ietf.org/html/rfc6749#section-4.3.1

解釋資源所有者交付式的最重要的方面是客戶不應該存儲用戶名和密碼。

相關問題