小编Séb*_*ZAT的帖子

移动应用程序的安全认证

我正在寻找一种以安全的方式验证我的移动应用程序用户的方法.移动应用程序是一个纯JS应用程序,并使用离子框架(和所以cordova).该应用程序只能通过REST API与我们的服务器通信.要求如下:

  • 机制必须依赖于独立的企业帐户(即不能选择链接到谷歌,Facebook或任何其他API.)
  • 该申请将在公共商店
  • 像许多移动应用程序(Gmail,Facebook,...)一样,它不需要比银行应用程序更多的安全性,用户必须在首次登录后自动进行身份验证("记住我"模式)

我发现了什么:

  • 使用OAuth 2

OAuth 2提供称为"刷新令牌"的长时间令牌.我想使用它的过期日期设置为一年.

然而,似乎没有强大的机制来保护这个标记.事实上,正如Jamsheed Kamarudeen对该答案的评论/sf/answers/504648441/所述,如果刷新令牌,客户端ID和秘密ID被盗(使用嗅探或直接从设备获取),攻击者将能够无限制地访问用户帐户......没有任何办法,AFAIK,知道它正在发生.

嗅探可能很困难,因为很明显,所有数据都将通过安全连接(SSL)发送,但从我的角度来看,它仍然可以进行管理.关于第二种攻击,"直接从设备中取出",我看到的每个解决方案都是关于在本地存储或浏览器cookie上存储数据(令牌或cookie)(例如,这篇文章在HTML5 Web App中使用OAuth2) .即使该帖子中的示例建议存储刷新令牌的哈希,我也看不出它的目的是什么,因为正如Mati Cicero的评论所提到的,它不会阻止攻击者能够检索到访问令牌,在我的情况下,可以无限制地访问用户的帐户.

此外,从我所看到的,本地存储和cookie太容易阅读.这还不够,还是我应该使用Android/iOS的原生安全存储?甚至本地本地存储似乎还不够(https://github.com/phonegap/phonegap/wiki/Platform-Security).

  • 使用Spring安全性

服务器端将由Spring实现.Spring-security提供的机制似乎比关于记忆我模式的OAuth 2更好(http://jaspan.com/improved_persistent_login_cookie_best_practice).但是,正如我所理解的那样,最终用户将无法在应用程序上登录两次(比方说,它的个人移动设备和专业移动设备).我承认这不是一个大问题,但它仍然不完美.最重要的是,最后,我们仍然存在有关cookie /令牌的存储安全问题.

这是我第一次寻找安全机制,所以也许我误解了一些机会主义,请让我知道.但是,我很惊讶地发现找到合适的流程有多困难.我确信这是所有移动应用程序的经典问题,但我找不到任何正确的方法来管理这个问题.

我的问题:正如您在上面所看到的,我没有找到一个安全的机制来在Web移动应用程序上设置"自动登录"过程.我该怎么设置?你有其他机械主义,而不是我发现的那些吗?

security authentication oauth-2.0 cordova ionic-framework

18
推荐指数
2
解决办法
1838
查看次数

如何将多个 SHA-256 指纹添加到 assetlinks.json 以验证 Android 链接?

我现在已经设置了资产链接,如下所示:

[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.myapp.app",
      "sha256_cert_fingerprints":
      [
        "so:me:de:bu:gs:ha",
        "so:me:pr:od:sh:aa"
      ]
    }
  },
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.myapp.app.staging",
      "sha256_cert_fingerprints":
      [
        "so:me:de:bu:gs:ha",
        "so:me:pr:od:sh:aa"
      ]
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

根据链接文档,该字段应该支持多个指纹,但我还没有找到任何如何格式化它的示例。鉴于它只是 JSON,我上面的格式化方式似乎应该可以正常工作,但是当我在该字段中有多个指纹时,我发现链接验证失败,而单个指纹似乎工作正常。

我在这里错过了一些非常明显的东西吗?

android digital-assets-links trusted-web-activity

15
推荐指数
1
解决办法
5433
查看次数

如何在TextView中获取ClickableSpan的坐标?

我有TextView很多ClickableSpan.

点击a ClickableSpan,我必须得到它的屏幕上的坐标(View在他的位置显示一个自定义).

问题是我不知道如何做到这一点.该onClick()方法ClickableSpan让我在参数View中,TextView其中包含ClickableSpan.

我已经使用以下内容来获取字符位置TextView,但我不知道如何将其转换为在文本屏幕上获取x/y位置.

@Override
public void onClick(View v){

    SpannableString completeText = (SpannableString)((TextView) v).getText();
    Log.v("characters position", completeText.getSpanStart(this) + " / " + completeText.getSpanEnd(this));

}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

编辑:我想得到ClickableSpan的整个坐标及其大小,目的是在文本的底部中心显示我的自定义视图.onTouch方法将为我提供手指位置,而不是整个文本坐标.所以,使用这种方法,我不会有文本的中间部分.

android position textview clickable

13
推荐指数
1
解决办法
5517
查看次数

仅使用 RxJS 运算符缓存 Http 请求

我正在尝试实现此处描述的内容:https ://www.prestonlamb.com/blog/rxjs-cache-and-refresh-in-angular

换句话说,我想在给定时间(假设 1 分钟)内缓存一个可观察值。当在给定时间之后进行订阅时,应再次检索数据并再次缓存 1 分钟。

预期结果示例:

T 00:00: Request (1) => RETRIEVE data
T 00:10: Request (2) => data from cache
T 00:35: Request (3) => data from cache
T 00:50: Request (4) => data from cache
T 01:10: Request (5) => RETRIEVE data
T 01:15: Request (6) => data from cache
T 01:30: Request (7) => data from cache
T 02:30: Request (8) => RETRIEVE data
Run Code Online (Sandbox Code Playgroud)

shareReplay 运算符可以正常工作,可以在给定时间内缓存数据,但在给定时间过后我无法重新启动它。

使用 shareRelay(1, 1000) 运算符的示例:

T 00:00: Request (1) …
Run Code Online (Sandbox Code Playgroud)

caching rxjs rxjs-pipeable-operators

6
推荐指数
1
解决办法
6454
查看次数

处理片段和视图分页器:无法更改片段的标记和递归到executePendingTransactions的条目

首先,我知道这些主题已经在stackoverflow上创建了很多时间,但我没有找到解决问题的方法.其次,我是法国人,所以我的英语不完美,对不起,请告诉我,如果你不明白的话.为了完成这个介绍,这是我第一次处理片段,所以,对不起,如果有一些我不太了解的东西!

我有三个按钮,允许在三个片段之间切换.在其中一个片段中,我有一个带有两个片段的视图寻呼机.目前,每个片段(有5个),只包含一个TextView.我正在使用最新版本的android-support-v4(我已经在stackoverflow中阅读了很多主题,说最新版本的支持解决了我的"递归进入executePendingTransactions"错误).

我的两个问题:

  • 当我在一个按钮中单击两次时,我有一个IllegaleStateException"无法更改片段的标记".我能够通过在onButtonSelected方法上创建一个新片段来解决这个问题,但是我不希望每次都重新创建片段,出于内存原因和功能原因:片段必须保持她的状态.这个问题不是我的主要问题,事实上,我知道当用户已经处于片段状态时禁用按钮是可能的,但是当没有完成此管理时会出现异常,这是奇怪的吗?

  • 当我从视图寻呼机的片段出来,然后我回到这个片段时,我有一个IllegalStateException"递归进入executePendingTransactions".我可以通过在处理程序上设置我的适配器来解决这个问题,或者使用FragmentStatePagerAdapter而不是FragmentPageAdapter(请参阅片段中的显示片段viewpager),但即使我的应用程序没有崩溃,当我使用视图寻呼机返回我的片段时,视图寻呼机已消失!

你能帮助我吗 ?

Java源代码如下,我认为布局源代码是无用的.

主要活动 :

public class MainActivity extends SherlockFragmentActivity{

private SherlockFragment fragmentOne, fragmentTwo, fragmentThree;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//      this.fragmentOne = new fragmentOne();
//      this.fragmentTwo = new fragmentTwo();
//      this.fragmentThree = new fragmentThree();
// Call new or instanciate ? What's the correct way ?

    this.fragmentOne = (SherlockFragment) SherlockFragment.instantiate(this, FragmentOne.class.getName());
    this.fragmentTwo = (SherlockFragment) SherlockFragment.instantiate(this, FragmentTwo.class.getName());
    this.fragmentThree = (SherlockFragment) SherlockFragment.instantiate(this, FragmentThree.class.getName());

    // Add fragment
    FragmentTransaction transaction = (
        this.getSupportFragmentManager().beginTransaction()
    ); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

5
推荐指数
1
解决办法
4551
查看次数