Articles of oauth 2.0

允许用户使用Google凭据访问您的应用的最佳方式

如果您有一个需要用户注册的Android应用程序,并且希望允许用户通过Google进行login,那么您将如何处理? 我想让Google+login脱离这里的讨论。 我们也没有使用用户凭据来访问Google API,我也不想额外访问Google+的社交function。 似乎有很多select: 使用OAuth2.0进行身份validation logging在Google OAUth2login页面 这并没有提到Android,但它(部分)基于OAuth2访问令牌,但更重要的是对JSON Web令牌id_token的validation。 这种对用户进行身份validation的方式还包括启动WebView以允许用户login到他们的Google帐户以及相当复杂的id_tokenvalidation。 使用OAuth2 / Google Play服务 Google Play服务中有一个示例,更多地关注授权。 它使用GoogleAuthUtil.getToken来检索access_token。 其中的一部分是肯定的authentication,因为对话状态“login到…”。 我是否正确地认为将OAuth2.0stream与access_token用作authentication机制是一种不好的做法? (将访问令牌存储为authentication令牌)。 支持Facebook / Twitterlogin 我问的原因是因为Twitter和Facebook推荐你实施“使用…login”身份validation过程 用Twitter实现login Facebookloginstream为Android 这似乎也完全基于OAuth访问令牌。 我没有意识到的任何其他选项允许您用他们的谷歌帐户authentication用户?

在Android的共享首选项中安全地存储Oauth2访问/刷新标记?

我知道我可以将值设置为“MODE_PRIVATE”,只有我的应用程序/用户ID将能够访问它们,但是,有什么方法让用户在任何时候访问它们? 那么将它们存储在共享首选项中是否“安全”,还是有更好的地方? 此外,如果我稍后决定公开某些用户设置的偏好,我是否可以隐藏这些值? 谢谢。 编辑:我也知道内部存储,但我想知道是否可以实现更简单的共享首选项。

Android订阅和Google API

我正尝试使用Google Play中新的Android订阅系统进入我的应用程序(我已经有了应用内结算工作正常)。 我已经成功地完成了订阅计费,但是现在我想通过使用google apis检索有关此订阅的信息,如android文档(http://developer.android.com/guide/market/billing/billing_subscriptions.html)中所示。 。 我希望我的服务能够执行API调用来检索这些信息,但是我有身份validation问题(使用oauth2)。 到目前为止,这是我做的(在我的PHP服务): require_once 'google-api-php-client/src/apiClient.php' const SERVICE_ACCOUNT_NAME = 'email from services account access'; $key = 'content of my private key retrieved from services account access'; $client = new apiClient(); $cred = new apiAssertionCredentials(SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/androidpublisher'), $key); $assertion = $cred->generateAssertion(); // This generate my encrypted JWT 然后,我尝试使用此JWT对象检索访问令牌。 问题是,当我使用访问令牌时,我得到了开发人员帐户不拥有应用程序的错误,这是不正确的。 (我知道这不是这样做的,但我只是想使用JWT检索access_token来理解为什么它不工作,如果我按照google apis文档中的说明,它不工作)。 我需要从服务器执行这个API调用,因此不需要涉及最终用户(无需手动同意)。

升级Firebase后出现OAuth2问题

我有一个工作的Android应用程序(也许更好地说HAD)。 该应用程序正在使用一些第三方库,包括:谷歌地图,Firebase,firebaseui。 转换应用程序使用新的Firebase后,我偶然发现了两个主要问题: firebaseuilogin屏幕改变了,现在看起来像这样(从login对话框变成活动): 这当然是完全不同于旧版本的,也有一些与debugging版本不同的奇怪原因。 我无法使用谷歌login与logcat中显示以下错误: com.google.firebase.FirebaseException:发生内部错误。 [找不到服务器configuration中的OAuth2客户端ID。 ] 在debugging版本中,这个问题不再发生。 只是为了清楚debugging构build变体使用相同的代码库,但不同的firebase数据库。

Android – 如何获得谷歌加访问令牌?

您好,我正在获取谷歌加访问令牌,而不使用范围与OAuth 2.0客户端ID。 但是使用此访问令牌不会获取电子邮件地址。 如何获取用户的电子邮件地址? accesstoken和OAuth 2.0客户端ID之间是否有区别? 我用了下面的代码, String accessToken=""; try { accessToken = GoogleAuthUtil.getToken( getApplicationContext(), mPlusClient.getAccountName(), "oauth2:" + Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE); System.out.println("Access token==" + accessToken); } catch (Exception e) { e.printStackTrace(); }

validation我的“应用程序”Google云端点不是“用户”

我正在尝试的是将我的Android应用程序authentication到Google Cloud Endpoint。 基本上,端点应该只允许我的Android应用程序访问的方法,没有别的。 我做了这些事情 – 在Google云端控制台的Eclipse中使用我的SHA1值创build客户端ID。 在Google云端控制台中为我的端点项目创build一个Web客户端ID。 将这两个客户端ID添加到每个端点上提到的“@Api”中。 在端点方法中添加一个额外的“用户”参数。 重新生成并将后端部署到云。 但是,当我运行这个“用户”总是作为“空”来。 我正在努力寻找一个适当的工作方法来完成这一切。 我search了很多论坛,但没有任何适当的答案。 这里是另一个类似的post限制访问谷歌云terminal到Android应用程序 这是我使用的参考 – https://developers.google.com/appengine/docs/java/endpoints/auth 有没有人在这里做过? 我的主要目标是不允许未经身份validation的应用程序和外部世界访问端点,出于明显的安全原因。 我不想使用基于最终用户的身份validation,因为我想保持我的应用程序非常简单。

浏览器意图并返回到正确的活动(closures打开的选项卡)

在Android中的AccountManager中实现自定义帐户types时,我有以下问题的loginstream程: login应通过OAuth提供商进行。 因此,我创build了一个启动WebView并启动OAuthstream程的SignInActivity 。 这工作得很好,当callback接收到my-custom-scheme://callback WebView检测到它,接收code查询string参数,并完成stream程。 使用WebView的缺点是,即使用户在浏览器中可能已经有一个活动的会话,该会话也不会在WebView使用,因此用户将不得不在WebView再次login。 为了解决这个问题,我尝试在AndroidManifest.xml使用intent-filter ,像这样: <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="my-custom-scheme" android:path="callback"/> </intent-filter> 而不是在SignInActivity中打开一个WebView ,然后启动一个浏览器的意图,并等待浏览器打my-custom-scheme://callback 。 Intent browserIntent = new Intent(Intent.ACTION_VIEW, "http://oauth2provider/authorize"); startActivity(browserIntent); finish(); 在我的SignInActivity我有以下代码来处理callback: if (intent != null && intent.getData() != null && getString("my-custom-scheme").equals(intent.getData().getScheme())) { String code = getIntent().getData().getQueryParameter("code"); // complete oauth flow } […]

如何使用Chrome自定义选项卡(Fitbit API)进行OAuth 2.0login

Fitbit API不再支持webview。 所以,我研究了Chrome自定义选项卡,并在我的应用程序中应用。 但login后,当我按下这个粉红色的button(允许button),什么都没有发生。 我如何获得访问令牌并将其存储在应用程序中? 请帮帮我。 谢谢。

Android Chrome自定义选项卡/ Fitbit Web API将不会redirect,如果应用程序已被授权。 (OAuth2.0的)

我打算创build一个第三方fitbit应用程序的闹钟同步。 不过,在注册我的应用程序时,我遇到了一些困难,即使您的客户端已经注册到应用程序,也更明确地获取访问令牌。 (考虑到用户重新安装他的应用程序的情况)。 我正在使用Chrome自定义选项卡(因为FitBit禁止使用WebView)来请求访问令牌: String url = "https://www.fitbit.com/oauth2/authorize?" + "response_type=token" + "&client_id=XXXXXX" + "&scope=activity"+ "&redirect_uri=fitbittester://logincallback"; customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url)); redirect到使用意图filter定义的自定义scheme后: <activity android:name=".TestActivity" android:label="TestActivity" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="fitbittester" android:host="logincallback" /> </intent-filter> </activity> TestActivity应该启动,我将从给定的Intent获取我的AccessToken: public class TestActivity extends AppCompatActivity { String string; @Override protected void onNewIntent(Intent intent) { string = intent.getDataString(); } @Override […]

Googlelogin使用新的GoogleSignInOptions获取访问令牌

我的Android应用程序当前使用GoogleAuthUtil来login用户并获取传递到后端的access_token (下面的代码片断显示创buildGoogleApiClient并使用GoogleAuthUtil获取令牌)。 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(new Scope("profile")) .build(); … … String accessToken = GoogleAuthUtil.getToken(GoogleLoginActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), "oauth2:profile email"); 然后我发送到后端 我正在尝试转移到新的Google SignIn – https://developers.google.com/identity/sign-in/android/sign-in 所以改变了GoogleApiClient的创build, GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("<web client id>") .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); 然后做login使用, startActivityForResult(Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient), RC_GET_TOKEN); 和活动结果使用(类似于上面链接中的例子), OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); if […]