【问题标题】:Xamarin android OAuth with ADFS and ADAL IssuesXamarin android OAuth 与 ADFS 和 ADAL 问题
【发布时间】:2019-08-03 05:42:10
【问题描述】:

我正在编写一个使用 ADAL 进行身份验证的 Xamarin.Forms 应用程序。我目前正在关注这里的流程。

https://forums.xamarin.com/discussion/comment/367489#Comment_367489

我正在使用 ADFS 进行身份验证,现在只担心 Android 客户端。我的问题是,每当我调用 AcquireTokenAsync 时,我都会看到登录屏幕,但没有内容。

我已经证明使用邮递员从 ADFS 获取令牌并且没有问题。

我的代码(我现在只是想证明这一点,我并不真正关心实现):

         string authority = "https://myserver/adfs";
         string resourceURI = "myidentity";
         string clientID = "123-123-123";
         string clientReturnURI = "http://localhost/";


         var authContext = new AuthenticationContext(authority,false);

            Task.Run(async () =>
            {
                var authResultAsync = await authContext.AcquireTokenAsync(resourceURI, clientID, new Uri(clientReturnURI), PlatformParameters);
            });

我的平台参数正在页面渲染器中设置

        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);

        this.page = e.NewElement as MainPage;
        this.page.PlatformParameters = new PlatformParameters(this.Context as Activity);
    }

我唯一的线索是我在控制台输出中得到了这个

Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

我也明白了,但这似乎是一个红鲱鱼(一些博客文章说只是出现在我正在使用的 sdk 级别的 Android N 设备上)

Rejecting re-init on previously-failed class java.lang.Class<uO>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/TracingController; 

对此的任何帮助将不胜感激,这几天我真的一直在努力。

【问题讨论】:

  • Connor Williams 能否使用 ADAL 包对 ADFS 进行身份验证?

标签: android xamarin xamarin.forms adfs adal


【解决方案1】:

根据您的错误, java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 这个问题和你的证书有关,你的设备不信任你的证书,你可以在安卓设备中查看受信任的证书,它是否包含你的根证书和中间证书? 您基本上有四种潜在的解决方案来使用 httpclient 修复 Android 上的“不可信”异常:

  1. 信任所有证书。不要这样做,除非你真的知道自己在做什么。
  2. 创建一个只信任您的证书的自定义 SSLSocketFactory。只要您确切知道要连接到哪些服务器,此方法就可以使用,但是一旦您需要使用不同的 SSL 证书连接到新服务器,您就需要更新您的应用。
  3. 创建一个包含 Android 证书“主列表”的密钥库文件,然后添加您自己的。如果这些证书中的任何一个过期,您有责任在您的应​​用程序中更新它们。我想不出这样做的理由。
  4. 创建一个使用内置证书 KeyStore 的自定义 SSLSocketFactory,但如果使用默认值验证失败,则使用备用 KeyStore。

你可以参考这个类似的帖子。 Trusting all certificates using HttpClient over HTTPS

【讨论】:

  • @Connor Williams 这个问题有更新吗?如果回复有帮助,请尝试将其标记为答案,它将帮助其他有类似问题的人。
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 2017-12-15
  • 2015-01-25
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多