gpt4 book ai didi

oauth - 如何使用 java 在 xPages 中使用 scribe 对 linkedin 用户进行身份验证

转载 作者:行者123 更新时间:2023-12-02 08:49:13 26 4
gpt4 key购买 nike

我正在尝试为我的站点验证 linkedin 用户。我正在使用 Scribe 来处理身份验证。

我正在尝试分两步完成此操作。

step1 只是获取正确的 url 并将用户重定向到确认页面。这工作正常。在我确认后,我被重定向回我网站上的一个页面。

第 2 步是我遇到的问题。当重定向的 xpage 打开时,我使用 url 中的 token 和验证器 key 调用 step2 方法。

我不明白的一件事是,我是否真的需要在这两个步骤中构建服务,以及这是否是导致我出现问题的原因。如何在我的两个步骤之间发送 requestToken。请建议如何让这个场景工作

谢谢 - 托马斯


import org.scribe.builder.ServiceBuilder;
import org.scribe.oauth.OAuthService;
import java.util.Scanner;
import org.scribe.builder.*;
import org.scribe.model.*;
import org.scribe.oauth.*;
import org.scribe.builder.api.*;
import javax.faces.context.*;


public class DoDance
{
private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)";

public void step1()
{
try {
OAuthService service = new ServiceBuilder()
.provider(LinkedInApi.class)
.apiKey("key")
.apiSecret("secret")
.callback("http://www.acme.com/linkedin.xsp")
.build();

Token requestToken = service.getRequestToken();
String authUrl = service.getAuthorizationUrl(requestToken);

// Redirects the user to linkedin confirmation page
// This is working fine
FacesContext.getCurrentInstance().getExternalContext().redirect(authUrl);

} catch (Exception e) {
e.printStackTrace();
}
}

public String step2(String tok,String ver){

// this method is called in the beforeRenderResponse in the redirected xpage
// I get the token and verifyer in from the url parameters

Response response = null;
try {
OAuthService service = new ServiceBuilder()
.provider(LinkedInApi.class)
.apiKey("key")
.apiSecret("secret")
.build();

Token accessToken = service.getAccessToken(???,new Verifier(ver));
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
service.signRequest(accessToken, request);
response = request.send();

} catch (Exception e) {
e.printStackTrace();
}
return "Body = " + response.getBody();

}


}

最佳答案

尝试在( session 范围的)用户 bean 中存储和检索 requestToken。

public class User {

private Token requestToken;

private static String BEAN_NAME = "userBean";

public static User get() {
FacesContext context = FacesContext.getCurrentInstance();
return (User) context.getApplication().getVariableResolver().resolveVariable(context, BEAN_NAME);
}

public Token getRequestToken() {
return requestToken;
}

public void setRequestToken(Token requestToken) {
this.requestToken = requestToken;
}


}

您可能还需要更改 JVM 的安全设置才能使用 Scribe。将此添加到 Domino 服务器的 java.policy 文件中:

grant {
permission java.util.PropertyPermission
"http.keepAlive", "read, write";
};

最后:您不需要从 beforeRenderResponse 事件传递 token 和验证器。可以使用

在 step2 函数中轻松检索它们
XSPContext context = XSPContext.getXSPContext( FacesContext.getCurrentInstance() );
String oauth_verifier = context.getUrlParameter("oauth_verifier");

关于oauth - 如何使用 java 在 xPages 中使用 scribe 对 linkedin 用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9817327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com