java - how to solve this 403 io exception? -
i want give whole google drive access application users. , use following code authorize google , oauth2.0.
function opengooglelogin() { var url = "https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/drive&redirect_uri=http://localhost:8080/abc/oauth2callback&response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxx&access_type=offline&approval_prompt=force"; window.location = url; } from above code got authorization code. on redirected page put following servlet code
public class oauth2callback extends httpservlet { private static final long serialversionuid = 1l; public oauth2callback() { super(); } /** * @see httpservlet#doget(httpservletrequest request, httpservletresponse * response) */ protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { system.out.println("entering doget"); try { // code string code = request.getparameter("code"); // format parameters post string urlparameters = "code=" + code + "&client_id=xxxxxxxxxxxxxxxxxxxxx" + "&client_secret=xxxxxxxxxxxxxxxxxx" + "&redirect_uri=http://localhost:8080/abc/oauth2callback" + "&grant_type=authorization_code"; //post parameters url url = new url("https://accounts.google.com/o/oauth2/token"); urlconnection urlconn = url.openconnection(); urlconn.setdooutput(true); outputstreamwriter writer = new outputstreamwriter( urlconn.getoutputstream()); writer.write(urlparameters); writer.flush(); //get output in outputstring string line, outputstring = ""; bufferedreader reader = new bufferedreader(new inputstreamreader( urlconn.getinputstream())); while ((line = reader.readline()) != null) { outputstring += line; } system.out.println(outputstring); //get access token jsonobject json = (jsonobject)new jsonparser().parse(outputstring); string access_token = json.get("access_token").getasstring(); system.out.println(access_token); //get user info url = new url( "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + access_token); urlconn = url.openconnection(); outputstring = ""; reader = new bufferedreader(new inputstreamreader( urlconn.getinputstream())); while ((line = reader.readline()) != null) { outputstring += line; } system.out.println(outputstring); // convert json response pojo class googlepojo data = new gson().fromjson(outputstring, googlepojo.class); system.out.println(data); writer.close(); reader.close(); } catch (malformedurlexception e) { system.out.println( e); } catch (protocolexception e) { system.out.println( e); } catch (ioexception e) { system.out.println( e); } system.out.println("leaving doget"); } } in above code , google pojo pojo class, don't know when run servlet, give me access , refrshtoken.. gives me error
java.io.ioexception: server returned http response code: 403 url: https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxxxxxxxxxxxx.
you making initial authorization request scope https://www.googleapis.com/auth/drive, , using it's code call https://www.googleapis.com/oauth2/v1/userinfo.
if want user profile information, have use 1 of these scopes in initial request,
- https://www.googleapis.com/auth/userinfo.email : view email address
- https://www.googleapis.com/auth/userinfo.profile : view basic profile info
so, change first url to
var url = "https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.profile&redirect_uri=http://localhost:8080/abc/oauth2callback&response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxx&access_type=offline&approval_prompt=force";
Comments
Post a Comment