2

ユーザーおよびAPI認証用にKeycloakを実装しており、Keyclaokサーバーで正常に認証されますが、 API の呼び出し中にエラーが発生します。

aerogear パイプ ライブラリとサンプル プロジェクトを使用してサーバー API を呼び出しています。 https://github.com/aerogear/aerogear-android-pipe

 try{
 AuthzModule authzModule = AuthorizationManager.config("keycloak", OAuth2AuthorizationConfiguration.class)
                .setBaseURL(new URL("URL:8080/auth"))
                .setAuthzEndpoint("/realms/appname/tokens/login")
                .setAccessTokenEndpoint("/realms/appname/tokens/access/codes")
                .setAccountId("keycloak-token")
                .setClientId("app_id")
                .setClientSecret("1b9a1376-bc6e-41d2-b3e5-cee754305a1f")
                .setRedirectURL("Callback")
                .setScopes(Arrays.asList("user"))
                .addAdditionalAuthorizationParam((Pair.create("access_type", "confidential")))
                .asModule();

        authzModule.requestAccess(this, new Callback<String>() {
            @Override
            public void onSuccess(String o) {

                System.out.println("Server Response" + o);
                retrieveFiles(authzModule);

            }

            @Override
            public void onFailure(Exception e) {
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }

        });
        PipeManager.config("GetFile", RestfulPipeConfiguration.class)
                .withUrl(new URL("Server_URL"))
                .module(authzModule)
                .forClass(String.class);

        Pipe<Object> documentsPipe = PipeManager.getPipe("GetFile", this);
        documentsPipe.read(new Callback<List<Object>>() {
            @Override
            public void onSuccess(final List<Object> fileses) {
                Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(Exception e) {
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

    }catch (Exception ex){
        Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
    }

この問題を解決するための可能な方法を提案してください。

4

1 に答える 1

1
        try{
 AuthzModule authzModule = AuthorizationManager.config("keycloak", OAuth2AuthorizationConfiguration.class)
                .setBaseURL(new URL("URL:8080/auth"))
                .setAuthzEndpoint("/realms/appname/tokens/login")
                .setAccessTokenEndpoint("/realms/appname/tokens/access/codes")
                .setAccountId("keycloak-token")
                .setClientId("app_id")
                .setClientSecret("1b9a1376-bc6e-41d2-b3e5-cee754305a1f")
                .setRedirectURL("Callback")
                .setScopes(Arrays.asList("user"))
                .addAdditionalAuthorizationParam((Pair.create("access_type", "confidential")))
                .asModule();

        authzModule.requestAccess(this, new Callback<String>() {
            @Override
            public void onSuccess(String o) {

                System.out.println("Server Response" + o);
                retrieveFiles(authzModule);

            }

            @Override
            public void onFailure(Exception e) {
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }

        });


    }catch (Exception ex){
        Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
    }

サーバーがjson応答を送信するときに、ヘッダーに認証トークンを使用して単純なhttp要求を呼び出すよりも。

Headers: Bearer + "auth token"、Content-Type : application/json、Accept: application/json

于 2015-06-25T12:34:45.050 に答える