Как использовать клиентскую библиотеку Java OpenID, чтобы получить userInfo так же, как nodejs - PullRequest
1 голос
/ 23 мая 2019

Я хочу использовать токен доступа, чтобы получить userinfo с библиотекой java open-id connect так же, как nodejs.

  1. Я использую npm-openid-client чтобы получить userInfo, и он очень хорошо работает в nodejs
/**
**  client_id and client_secret can be empty now
*/
const { Issuer } = require('openid-client');
const end_point = 'xxx'
const access_token = 'xxx'
Issuer.discover(end_point).then(function (issuer) {
    const client = new issuer.Client({
      client_id: 'xx',
      client_secret: 'xx',
    }); 
    client.userinfo(access_token).then(function (userinfo) {
    console.log('userinfo %j', userinfo);
    });
 });

Я открываю библиотеку java с открытым идентификатором и нахожу библиотеку из openid.net и, наконец, использую connect2id

Я перехожу по ссылке openid-connect / userinfo и пишу код ниже:

import java.io.*;
import java.net.*;
import com.nimbusds.oauth2.sdk.http.*;
import com.nimbusds.oauth2.sdk.token.*;
import com.nimbusds.openid.connect.sdk.claims.*;

class Test  {
    public static void main (String[] args) throws Exception{
        String uriStr = "";
        String tokenStr = "";
        URI userInfoEndpoint = new URI(uriStr);    
        BearerAccessToken token = new BearerAccessToken(tokenStr);

        // Make the request
        HTTPResponse httpResponse = new UserInfoRequest(userInfoEndpoint, token)
            .toHTTPRequest()
            .send();

        // Parse the response
        UserInfoResponse userInfoResponse = UserInfoResponse.parse(httpResponse);

        if (! userInfoResponse.indicatesSuccess()) {
            // The request failed, e.g. due to invalid or expired token
            System.out.println(userInfoResponse.toErrorResponse().getErrorObject().getCode());
            System.out.println(userInfoResponse.toErrorResponse().getErrorObject().getDescription());
            return;
        }

        // Extract the claims
        UserInfo userInfo = userInfoResponse.toSuccessResponse().getUserInfo();
        System.out.println("Subject: " + userInfo.getSubject());
        System.out.println("Email: " + userInfo.getEmailAddress());
        System.out.println("Name: " + userInfo.getName());
    }
}
В результате httpResponse возврат 404 не найден.как я могу это исправить и получить userInfo?
...