如何将OAuth身份验证与Spring Security联系起来

Ant*_*ony 8 grails oauth spring-security grails-plugin spring-security-oauth2

我有一个Grails 2.5.3应用程序,目前使用spring安全插件进行身份验证.用户使用用户名/密码登录.

我现在更新了应用以支持OAuth身份验证(使用ScribeJava).用户可以单击将其重定向到OAuth提供程序页面的链接,并在成功输入凭据后将其重定向回我的应用程序.但是,我无法将此功能与spring安全插件联系起来,以便当用户重定向回我的应用程序时(从OAuth成功登录后),我实际上可以看到他们已登录并继续使用我的所有弹簧像安全的好东西<sec:ifLoggedIn>.

有谁知道这样做的方法或有一个例子我可以看一看?

以下是我使用OAuth对用户进行身份验证的方法:

//called when user clicks "login using oauth"
def authenticate() {
    OAuthService service = new ServiceBuilder()
                              .apiKey(grailsApplication.config.my.sso.clientid)
                              .apiSecret(grailsApplication.config.my.sso.clientsecret)
                              .build(MyApi.instance());
    String url =  service.getAuthorizationUrl();
    return redirect(url: url)
}

//called when oauth provider redirects to my application
def authorization_code() {
    def code = params.code
    OAuthService service = new ServiceBuilder()
                              .apiKey(grailsApplication.config.my.sso.clientid)
                              .apiSecret(grailsApplication.config.my.sso.clientsecret)
                              .build(MyApi.instance());
    println code                          
    OAuth2AccessToken accessToken = service.getAccessToken(code);
    String userProfileUrl = grailsApplication.config.my.sso.authdomain+"/userinfo"
    final OAuthRequest request = new OAuthRequest(Verb.GET, userProfileUrl);
    service.signRequest(accessToken, request);
    final Response response = service.execute(request);
    println(response.getCode());
    println(response.getBody());        
    render (text: code)
}
Run Code Online (Sandbox Code Playgroud)

Bip*_*mar 1

每当您通过 进行身份验证时OAuth,远程服务器unique id (some numeric value)每次都会返回给您。您可以使用它id来验证您的用户并使用springsecurity.reauthenticate()方法对用户进行身份验证。

步骤:

  1. 当用户与服务提供商连接(首次验证)时。服务提供商将其发送给您unique id。将其保存unique id在用户表中。
  2. 当用户通过该服务提供商登录时。服务提供商再次发送该信息unique id。检查您的系统中是否unique id存在该用户,如果存在具有该唯一 ID 的用户,则使用 springsecurity.reauthenticate(userInstance)方法对用户进行身份验证。现在您可以使用 Spring 安全功能。

查看链接:http://www.jellyfishtechnologies.com/grails-2-2-0-integration-with-facebook-using-grails-oauth-plugin/