2016-07-22 21 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

相关问题