1

我使用 Apache OLTU 库实现了 OAuth2 身份验证。它可以工作,但我手动处理来自 RedirectURL 的请求令牌。

  1. 步:

    request = OAuthClientRequest.authorizationProvider(OAuthProviderType.GOOGLE)//authorizationProvider(OAuthProviderType.GOOGLE) .setState(OAuth.OAUTH_STATE) .setResponseType(OAuth.OAUTH_CODE) .setRedirectURI(" http://localhost:8080 ").setClientId(clientId) .setScope(" https://www.googleapis.com/auth/drive ") .buildQueryMessage();

  2. 步:

    OAuthClientRequest oAuthClientRequest = OAuthClientRequest.tokenProvider(OAuthProviderType.GOOGLE) .setGrantType(GrantType.AUTHORIZATION_CODE) .setClientId(clientId) .setClientSecret(clientSecret) .setRedirectURI(" http://localhost:8080 ") .setCode(requestCode).buildBodyMessage() ;

在这两步之间,我需要自动处理代码的提取。我如何在代码中实现这一步?

我不会在 servlet 中,而是在 Portlet 中。

4

1 回答 1

1

问题“如何在代码中实现这一步?”

要求“我不希望它不在 servlet 中,而是在 Portlet 中。”

答案

(1) 供您参考,我将源代码添加到您的源代码中(使用 Apache OLTU 库)以“自动处理 OAuth 授权代码的提取”。

// 1. Step
OAuthClientRequest request = OAuthClientRequest.authorizationProvider(OAuthProviderType.GOOGLE)//authorizationProvider(OAuthProviderType.GOOGLE) .setState(OAuth.OAUTH_STATE) .setResponseType(OAuth.OAUTH_CODE) .setRedirectURI("http://localhost:8080") .setClientId(clientId) .setScope("https://www.googleapis.com/auth/drive") .buildQueryMessage();


// Create the response wrapper
OAuthAuthzResponse oar = null;
oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request);

// Get Authorization Code
String requestCode = oar.getCode();


// 2. Step 
OAuthClientRequest oAuthClientRequest = OAuthClientRequest.tokenProvider(OAuthProviderType.GOOGLE) .setGrantType(GrantType.AUTHORIZATION_CODE) .setClientId(clientId) .setClientSecret(clientSecret) .setRedirectURI("http://localhost:8080") .setCode(requestCode).buildBodyMessage();

(2)更多细节可以参考下面的示例代码

“演示/客户端演示/src/main/java/org/apache/oltu/oauth2/client/demo/controller/RedirectController.java”

来自GitHub 存储库中的Apache Oltu OAuth 2.0 客户端和提供程序,它是 Apache Oltu 的一个分支,带有Pull Request #10,用于两个新提交“添加提供程序演示和自述文件”。

提供者演示应用程序(“demos/provider-demo”来自Apache Oltu OAuth 2.0 客户端和GitHub 存储库中的提供者)允许您运行独立的 OAuth 2.0 服务器来测试和调试 OAuth2 身份验证客户端(由您在 Portlet 中实现)。

于 2019-05-27T22:59:17.387 回答