簡體   English   中英

在 Android 的 Auth0 Lock 中獲取 403 不允許的用戶代理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM