3脚Oauth2,谷歌应用引擎golang

时间:2014-11-14 10:18:38

标签: android google-app-engine oauth go oauth-2.0

我需要一些帮助,尝试使用golang在谷歌应用引擎上实施一个3腿的Oauth2谷歌。

我一直关注此工作流https://developers.google.com/accounts/docs/CrossClientAuth

我还使用github.com/golang/oauth2包进行oauth2 golang身份验证。

在谷歌文档中,它说我需要从前端客户端获取代码,然后将代码发送到后端并将代码交换为有效的令牌。

android:

//service account id
private final String scopes = "audience:server:client_id:XXX-XXX"

mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN).build();

        findViewById(R.id.log).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                LongOperation longOperation = new LongOperation();
                //calling the async to perform the service call
                longOperation.execute(scopes); 

            }
        });  

private class LongOperation extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {

            try {
                code = GoogleAuthUtil.getToken(MainActivity.this,Plus.AccountApi.getAccountName(mGoogleApiClient),params[0]);
            } catch (GoogleAuthException e) {
                e.printStackTrace();
                Log.d("ok",String.valueOf(e));
            } catch (IOException e) {
                e.printStackTrace();
                Log.d("ok",String.valueOf(e));
            }
            Log.d("ok",String.valueOf(code));

            return null;
        }
    }

现在:后端......

我创建了一个GET端点(现在......它将是一个POST),以便传递我在android async中获取的代码,尝试通过调用google Oauth2提供的方式将其交换为有效的令牌它使用JSON的ServiceAccounts id。 我按照此文档http://godoc.org/github.com/golang/oauth2/google - &gt;&gt; ServiceAccountJSON。

package Oauth2

import (

    "github.com/golang/oauth2"
    "net/http"
    "github.com/golang/oauth2/google"

    "appengine/urlfetch"
    "appengine"
)

func ExchangeCode(r *http.Request,code string){

    c := appengine.NewContext(r);

//setting endpoints for calling the get supplying android client code , and oauth2callback
    oauth2.Endpoint("https://XXX.appspot.com/oauth2","https://XXX.appspot.com/oauth2callback");

    f, err := oauth2.New(
        google.ServiceAccountJSONKey("static/XXX.json"), //reading the json file that was         supplyde from the google console
        oauth2.Scope("https://www.googleapis.com/auth/userinfo.profile"),
        )

    if err != nil {
        c.Infof(err.Error());
    }

    f.AuthCodeURL("tiqitiq", "offline", "auto"); //u := *f.opts.AuthURL

    c.Infof("flow v%",f);

    client := urlfetch.Client(c);

    t,err := f.NewTransportFromCode(code);
    if err != nil {
        c.Errorf(err.Error());
    }

    client.Transport = t;
        c.Infof(err.Error());
        return
    }


    c.Infof("resp:= %v",resp);
}

我似乎没有把它弄好......

据我所知,我需要调用此函数并提供params以获得正确的令牌调用。 但我在运行时试图使用这个包得到nil指针异常..

func : f.AuthCodeURL("tiqitiq", "offline", "auto"); 
Oauth2 package exception : u := *f.opts.AuthURL;

我还明白我需要使用t,错误:= f.NewTransportFromCode(code); 功能将从Android应用程序获取的代码传输到谷歌Oauth2服务器并获得回调给我令牌和刷新令牌网址.. 这条线也刹车..

这一切都发生在谷歌应用引擎上使用golang ..请帮助我这么卡住..

0 个答案:

没有答案