我在独立计算机上安装了WSO2 API Manager。我有一个Java客户端(假设PSVM),其中包含APIM上已注册应用程序的必要客户端ID和秘密。我们是否可以仅使用Java中的客户端ID和密钥获取承载令牌。
请帮助表示感谢。
我有以下代码,但它需要用户名和密码。
public Token getToken(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);
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 :(得分:0)
您可以查看其token API:
用户需要访问令牌来调用在应用程序下订阅的API。调用API时,访问令牌在HTTP头中传递。 API Manager提供令牌API,您可以使用该API生成和续订用户和应用程序访问令牌。令牌API的响应是JSON消息。您从JSON中提取令牌并使用HTTP Authorization标头传递它以访问API。
以下主题说明如何生成/续订访问令牌并对其进行授权。 WSO2 API Manager支持四种最常见的授权授权类型,您还可以定义其他类型。
答案 1 :(得分:0)
如果您检查Oauth2授权类型,您可以找到答案。 WSO2 API管理器支持所有授权类型(授权代码,隐式,资源所有者密码凭据,OAuth 2.0 spec中提到的客户端凭据)。每种授权类型都有不同的流程来生成访问令牌。
您现在使用的资源所有者密码凭据授予类型(或密码授予类型)需要用户名和密码来生成令牌。如果要使用客户端密钥和客户端ID,则可以使用客户端凭据授予类型。见client credential grant type section