![](/img/trans.png)
[英]Lock Auth0 for android not returning UserProfile on authentication
[英]getting 403 disallowed user agent in Auth0 Lock for Android
在我的 android 應用程序中集成 Auth0 登錄。 對於這種集成,我正在關注這個https://auth0.com/docs/libraries/lock-android
它以前工作正常,但現在我在點擊谷歌時面臨 403 不允許的用戶。
當我在谷歌搜索時,我發現了這一點:谷歌自 4 月 20 日起出於安全目的決定阻止來自嵌入式網絡視圖的訪問,這就是為什么 Auth0 使用谷歌登錄失敗的原因。
iOS家伙使用以下方法解決了同樣的問題:
但在android中沒有找到這個
如何解決這個問題。 任何人對此有想法。
我的一段代碼:
compile 'com.auth0.android:lock:2.+'
Auth0 auth0 = new Auth0(getString(R.string.auth0_client_id), getString(R.string.auth0_domain));
mLock = Lock.newBuilder(auth0, mCallback)
//Add parameters to the builder
.closable(true)
.build(this);
startActivity(mLock.newIntent(this));
private LockCallback callback = new AuthenticationCallback() {
@Override
public void onAuthentication(Credentials credentials) {
//Authenticated
}
@Override
public void onCanceled() {
//User pressed back
}
@Override
public void onError(LockException error) {
//Exception occurred
}
};
顯現:
<activity
android:name="com.auth0.android.lock.LockActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/MyLock.Theme">
<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:host="quikdeal1.auth0.com"
android:pathPrefix="/android/{YOUR_APP_PACKAGE_NAME}/callback"
android:scheme="https" />
</intent-filter>
</activity>
正如你所說,谷歌決定阻止來自嵌入式WebView
的訪問。 我也發生了同樣的事情,我只是自己放置了用戶代理。 它看起來像這樣:
public static final String USER_AGENT_FAKE = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19";
@Override
protected void onCreate(Bundle savedInstanceState) {
webView.getSettings().setUserAgentString(USER_AGENT_FAKE);
}
由於 Google 會阻止來自WebView
的請求,因此我們需要在發出請求之前自己設置一個用戶代理。
使用其他答案中給出的硬編碼假用戶代理有一個缺點。 Gmail 會向用戶發送電子郵件,告知他們的帳戶已從特定設備(不是他們的設備,可能會引起懷疑)登錄。
使用系統的默認用戶代理對我有用。
webView.getSettings().setUserAgentString(System.getProperty("http.agent"));
它對我有用:
private WebView mWebView;
public static final String USER_AGENT = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView.getSettings().setUserAgentString(USER_AGENT);
}
谷歌阻止網絡瀏覽使用其 OAuth。 參考鏈接
您需要通過本機代碼進行 OAuth。 或使用 Webview 的一些替代方案
正如@OShiffer 所提到的,您需要添加一個虛假的用戶代理,但現在它已經過時了,您必須改用新的。 用這個
public static final String USER_AGENT = "Mozilla/5.0 (Linux; Android 10; SM-J105H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Mobile Safari/537.36";
另一種更吸引人的方法是從真正的 WebView 的 UserAgent 中移除 WebView wv
標志。
А 根據 Chrome for Android User-Agent Strings 文檔:
Lollipop 及更高版本中的 WebView UA
在較新版本的 WebView 中,您可以通過查找wv
字段來區分 WebView,如下所示。
Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv)
AppleWebKit/537.36 (KHTML, like Gecko)
Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36
所以你應該像這樣設置用戶代理:
webView.getSettings().setUserAgentString(
webView.getSettings().getUserAgentString().replace("; wv)", ")")
);
因此,所有關於設備操作系統的重要信息、WebView 中使用的 Web 引擎的版本都留給統計和跨平台布局(如果站點使用它)。 在 WebView 中打開的頁面將盡可能正確地顯示。
另請注意,如果您的minSdk 21
,這種方法是相關的。 對於舊版本,還有另一個用戶代理字符串模板(在上面的鏈接中描述)。
僅供參考,我遇到了同樣的問題並掙扎了一段時間,然后才意識到很多 Android 模擬器沒有安裝有效的默認瀏覽器。 只需使用安裝了 Chrome 的設備即可為我修復此錯誤。 在這里查看這個非常詳細的答案: https ://github.com/FormidableLabs/react-native-app-auth/issues/716
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.