2016-07-22 27 views
0

我在獨立的機器上安裝了WSO2 API Manager。我有一個Java客戶端(假設PSVM),在APIM上具有必要的客戶端ID和註冊應用程序的祕密。我們是否可以使用Java中的客戶端ID和祕密獲得承載令牌?獲取不記名令牌,僅使用客戶端ID和祕密。是否有可能

請大家諒解。

我有以下代碼,但它需要用戶名和密碼。

公共令牌爲gettoken(字符串的用戶名,密碼字符串,字符串範圍){

String submitUrl = GenarateAccessTokenConfiguration.getInstance().getLoginURL(); 
    String consumerKey = GenarateAccessTokenConfiguration.getInstance().getConsumerKey(); 
    String consumerSecret = GenarateAccessTokenConfiguration.getInstance().getConsumerSecret(); 

    try { 
     String applicationToken = consumerKey + ":" + consumerSecret; 
     BASE64Encoder base64Encoder = new BASE64Encoder(); 
     applicationToken = "Basic " + base64Encoder.encode(applicationToken.getBytes()).trim(); 

     String payload = "grant_type=password&username="+username+"&password="+password+"&scope="+scopes; 
     HttpResponse httpResponse = httpClient.doPost(submitUrl,applicationToken, 
       payload,"application/x-www-form-urlencoded"); 
     if (httpResponse.getStatusLine().getStatusCode() != 200) { 
      return null; 
     } 
     String response = httpClient.getResponsePayload(httpResponse); 


     System.out.println("JSON Response : "+response); 


     return JSONClient.getAccessToken(response); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

public Token getTokenWithScopes(String username, String password, String scopes){ 
    String submitUrl = GenarateAccessTokenConfiguration.getInstance().getLoginURL(); 
    String consumerKey = GenarateAccessTokenConfiguration.getInstance().getConsumerKey(); 
    String consumerSecret = GenarateAccessTokenConfiguration.getInstance().getConsumerSecret(); 
    try { 
     String applicationToken = consumerKey + ":" + consumerSecret; 
     BASE64Encoder base64Encoder = new BASE64Encoder(); 
     applicationToken = "Basic " + base64Encoder.encode(applicationToken.getBytes()).trim(); 

     String payload = "grant_type=password&username="+username+"&password="+password+"&scope="+scopes; 
     HttpResponse httpResponse = httpClient.doPost(submitUrl,applicationToken, 
       payload,"application/x-www-form-urlencoded"); 
     if (httpResponse.getStatusLine().getStatusCode() != 200) { 
      return null; 
     } 
     String response = httpClient.getResponsePayload(httpResponse); 
     return JSONClient.getAccessToken(response); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

回答

0

,你可以看看到其token API

用戶需要訪問令牌來調用應用下認購的API。訪問令牌在調用API時通過HTTP頭傳遞。 API管理器提供了一個令牌API,您可以使用該API來生成和更新用戶和應用程序訪問令牌。令牌API的響應是一條JSON消息。您從JSON中提取令牌並使用HTTP授權標頭傳遞它以訪問該API。

以下主題介紹如何生成/更新訪問令牌並對其進行授權。 WSO2 API Manager支持四種最常見的授權授權類型,您也可以定義其他類型。

  • 交換用的OAuth2 SAML2承載令牌 - SAML擴展交付式
  • 與授權碼生成訪問令牌 - 授權碼交付式
  • 與NT LAN管理器生成的訪問令牌 - NTLM交付式
  • 生成訪問帶有用戶憑證的憑證 - 密碼授予類型
0

如果您檢查Oauth2授予​​類型,可以爲此找到答案。 WSO2 API管理器支持所有授權類型(授權代碼,隱式,資源所有者密碼憑證,在OAuth 2.0 spec中提到的客戶端憑證)。每種授權類型具有不同的流程來生成訪問令牌。

您現在使用的資源所有者密碼憑據授予類型(或密碼授予類型)現在需要用戶名和密碼來生成令牌。如果你想使用客戶端密鑰和客戶端ID,那麼你可以使用客戶端證書授權類型。見client credential grant type section

相關問題