簡體   English   中英

如何從Xamarin / Android Webview localstorage接收當前訪問令牌?

[英]How to receive current access token from Xamarin / Android webview localstorage?

我目前在Xamarin Forms應用程序上使用自定義Webview。 我需要與需要訪問令牌才能返回值的api通信。 到目前為止,我已經能夠登錄,接收我的登錄數據(包括我的首次訪問權限)並通過回調刷新令牌,並將其存儲在sqlite數據庫中的智能手機上。 但是,如何知道訪問令牌是否更改?

由於我僅在登錄時存儲了訪問令牌,因此如果Webview的會話使用刷新令牌更新了訪問令牌,該怎么辦?

我需要本機api調用的新令牌,而無需重新登錄,因為Webview會刷新訪問令牌,因此我想以某種方式從Webview本地存儲中接收當前訪問令牌。

有什么辦法可以從Webview本地存儲中獲取當前訪問令牌?

通常,當我們使用過時的令牌請求API時,后台服務器將驗證請求的令牌。 如果令牌過期,則會返回相應的反饋數據,然后APP彈出用戶提示: Token expired, please login again. 然后,APP將跳至登錄頁面,然后再次登錄以獲取最新令牌。

更新1:

好吧,由於令牌只能在登錄時獲取,因此當您請求API並發現令牌已過期時,可以再次登錄並獲取最新的令牌。

但我們不建議這樣做,因為它違反了令牌的目的之一: Using for authentication 例如,如果用戶登錄並且長時間不使用它,而另一個別有用心的人拿起電話並使用APP,則即使令牌過期,他也可以成功使用APP並獲取一些私人信息。 。

更新2:

是的,可以將userKey字段存儲在LocalStorage中。 例如,如果要獲取存儲在LocalStorage中的userKey字段,可以執行以下操作:

1,編寫一個接口以接受Js回調

  public class MyJSInterface : Java.Lang.Object, Java.Lang.IRunnable
{
    Context context;
    public MyJSInterface(Context context)
    {
        this.context = context;
    }

    [JavascriptInterface]
    [Export]
    public void Run()
    {
        Toast.MakeText(context, "Hello from C#", ToastLength.Short).Show();
    }
}

2.添加到WebView並重命名為“ shixintest”:

  mWebView.AddJavascriptInterface(new MyJSInterface(this), "shixintest");

3.調用JS

  private void getLocalStorageUserKey()
    {
        if (mWebView != null && TextUtils.IsEmpty(APPEnvironment.GetBeforeLoginUserKey()))
        {
            mWebView.LoadUrl(
        "javascript:(function(){
            var localStorage = window.localStorage; window.shixintest.getUserKey(localStorage.getItem('userKey'))})()");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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