Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

在【Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用】里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点。上章是使用了Microsoft Authentication Library (MSAL)类库做认证,其实最后使用的是Azure AD V2.0 的OAuth2.0认证,而且支持所有用户身份认证:

  • 个人用户(@live.com、@outlook.com、@hotmail.com)
  • 企业(工作或学校)用户(@xxx.onmicrosoft.com)

以前如果需要支持Microsoft个人账号和Azure Active Directory两者是很困难的,必须实现两套认证逻辑,现在借助Azure AD V2.0可以一次性实现。

Azure AD V2.0 和 Azure AD区别统计如下:

  Azure AD Azure AD V2.0
条件访问设备策略 支持 目前不支持
兼容 OAuth 2.0 和 OpenID Connect 不兼容 兼容
用户权限 静态:应用注册期间已指定 动态:应用运行时期间请求;包括增量许可
帐户类型
工作或学校


工作或学校

个人

应用程序 ID 各个平台单独的应用程序 ID 多个平台同一个应用程序 ID
注册地点 Microsoft Azure 管理 Microsoft 应用程序注册
认证类库 ADAL:Active Directory 身份验证
例如:

AuthenticationContext.AcquireTokenAsync(resource,CLIENT_ID,new Uri(REDIRECT_URL),              platformParameters);

MSAL:Microsoft身份验证(预览版)
例如:
PublicClientApplication.AcquireTokenAsync(Scopes)

温馨提醒:

在[Microsoft 应用程序注册]注册的应用ID,ADAL一样可以使用登录,不过只限管理员和已经授权给这个应用的用户.(如果用户登录不了,可以先使用MSAL类库弹出授权页面授权,然后再使用ADAL就可以登录了。)

Token

通过ADAL或者MSAL类库取得的JWT IDToken是可以解析的,解析之后的数据如下:

两个类库取得的RefreshToken都是存储在应用相关文件夹里面,具体地址如下:

UWP

private static void DefaultTokenCache_BeforeAccess(TokenCacheNotificationArgs args)

{

try


            {

var localSettings = ApplicationData.Current.LocalSettings; localSettings.CreateContainer(LocalSettingsContainerName, ApplicationDataCreateDisposition.Always); byte[] state = LocalSettingsHelper.GetCacheValue(localSettings.Containers[LocalSettingsContainerName].Values); if (state != null) { DefaultShared.Deserialize(state); } } catch (Exception ex) { Logger.Information(null, "Failed to load cache: " + ex); // Ignore as the cache seems to be corrupt

            }

        }

Android

try

            {

                ISharedPreferences preferences 

= Application.Context.GetSharedPreferences(SharedPreferencesName, FileCreationMode.Private); string stateString = preferences.GetString(SharedPreferencesKey, null); if (stateString != null) { byte[] state = Convert.FromBase64String(stateString); args.TokenCache.Deserialize(state); } } catch (Exception ex) { PlatformPlugin.Logger.Warning(null, "Failed to load cache: " + ex); // Ignore as the cache seems to be corrupt

            }

iOS

try

            {

                SecStatusCode res;

var rec = new SecRecord(SecKind.GenericPassword) { Generic = NSData.FromString(LocalSettingsContainerName), Accessible = SecAccessible.Always, Service = "MSAL.PCL.iOS Service", Account = "MSAL.PCL.iOS cache", Label = "MSAL.PCL.iOS Label", Comment = "MSAL.PCL.iOS Cache", Description = "Storage for cache"


                };

var match = SecKeyChain.QueryAsRecord(rec, out res); if (res == SecStatusCode.Success && match != null && match.ValueData != null) { byte[] dataBytes = match.ValueData.ToArray(); if (dataBytes != null) { args.TokenCache.Deserialize(dataBytes); } } } catch (Exception ex) { PlatformPlugin.Logger.Warning(null, "Failed to load cache: " + ex); // Ignore as the cache seems to be corrupt

            }
Token 有效期 描述
ID Token(企业用户) 1小时  
ID Token(个人用户) 24小时  
Access Token 1小时 可以通过Refresh Token获取新的。
Refresh Token(企业用户) 14天 每次使用之后重新设置14天有效期,最大更新到90天。
Refresh Token(个人用户) 1年  

备注:

之所以对这个稍微研究,其实最开始是有一个目的【就是使用这些类库获得的Token是否可以访问所有企业的Office365?】。调查之后发现ADAL确实可以直接访问Sharepoint Rest API,不过每个企业的Azure AD都需要注册身份验证应用,从而有多个应用ID,这样程序请求的应用ID都需单独设置,这样就变成了企业定制版(如果有懂的希望能给点建议?毕竟Azure AD上还有很多现成的应用,这些不知道是怎么放上去的?)。对应MSAL类库得使用它自己开放出来的Sharepoint API才行,而且目前它的API还是Beta版很多东西都不完全。如果只想做企业内部的应用的话,ADAL类库还是足够的。

时间: 2024-07-30 10:19:00

Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)的相关文章

Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系

在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0.304142221-alpha".你正在尝试将此程序包安装到目标为".NETPortable,Version=v4.5,Profile=Profile111"的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件.有关详细信息,请联系程序包作者. 不只是Microsof

Outlook邮箱配置

1.在outlook邮箱里启用pop3 2.接收邮件服务器 pop3-mail.outlook.com 3.发送邮件服务器 smtp-mail.outlook.com 4.其他设置 -->发送服务器 -->我的发送要求验证 5.其他设置 -->高级 -->接收服务器 995,勾选 此服务要求加密连接 发送服务器 --> 587 使用tls加密类型

Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面

Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.Xamarin.Forms 通过使用平台的原生控件来渲染用户界面,使用 Xamarin.Forms 的 App在外观上与平台完全一致.通过本文您可以快速了解如何使用 Xamarin.Form 来进行应用程序的开发. 简介 Xamarin.Forms可以帮助开发人员快速的构建跨平台的UI,通过一次编码,生成多平台界面.如果你做的工作

Outlook邮箱目录与规则迁移工具

你应该遇到过,用户outlook邮箱的PST文件太大或超过了19 G,要求用户新建PST文件,用户埋怨我那么多的规则目录怎么办,又要新建邮箱目录与规则,能不能备份到新建的PST文件上啊. 而Outlook是没有这个功能的,在网上扒了下也没找到相关的工具.为了解决这个问题,我花时间研究了下outlook的API,开发了一个Outlook邮箱目录与规则迁移工具,在此分享给大家使用. 希望对大家的工作有所帮助. 软件基于VBS语言开发,作用是迁移OUTLOOK邮箱的PST的目与规则,支持outlook

Xamarin.Forms探索--使用 Xamarin.Forms 来创建跨平台的用户界面

Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.与HTML 5 不同的时,Xamarin.Forms 通过使用平台的原生控件来渲染用户界面,使用 Xamarin.Forms 的 App在外观上与平台完全一致.Xamarin.Forms最大的特点是:一次编写,各处使用,原生展现,这也是最吸引我的地方,下图就是一个简单的示例: 接下来我们有一系列的文章来介绍如何使用 Xamarin

outlook邮箱邮件与企业邮箱同步(outlook本地文件夹邮件,web邮箱里没有)

用惯了outlook2010, 问题:今天将邮件放到自定义文件夹后,发现在web邮箱中看不到邮件了.不能同步到企业邮箱. 解决忙了一天,才知道是账户类型问题,pop3类型,只下载不上传.所以outlook本地修改后,web邮箱看不到.创建账户类型imap,才能将本地文件夹邮件上传到邮箱服务器.创建imap新账户,然后将老账户中的本地文件夹直接拖动到新用户下,然后选择"发送/接受"下的"所有用户组"(单选imap类型用户也行),或者关闭outlook,自动将邮件上传到

正确使用Outlook邮箱给你带来什么?

Outlook邮箱涉及邮件.人脉.日程.SkyDrive等服务,并与Facebook深度集成.用户可以通过登录邮箱首页申请Outlook为域名后缀的邮箱. 它是使用频率最高的企业电子邮件.outlook是MS Office办公软件中的一个软件,是用来管理你的E-mail用的. Outlook邮箱的优势 1)管理多个电子邮件和新闻组帐户 Outlook邮箱允许用户管理多个电子邮件或新闻组帐户,允许用户在同一个窗口中处理它们. 2)轻松快捷地浏览邮件 邮件列表和预览窗格允许在查看邮件列表的同时阅读单

Xamarin+Prism开发之.net standard化

前面[Visual Studio 2017创建.net standard类库编译出错原因]已经解决.net standard类库的编译问题,现在可以正式进入主题了.作为.net 跨平台开发者也得跟上时代,响应微软变化.微软正在开发.net standard 2.0的版本,听说将是最全的API库,那时目前使用的pcl类库将会被替代.考虑到未来的变化,所以打算从现在开始新建xamarin项目的时候就去PCL化,全部.net standard 化. 由于2.0还没有正式发布,xamarin也还没有更新

Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系

祝各位2017年事业辉煌!开年第一篇博客,继续探索Xamarin.Forms… 为什么我做Xamarin开发的时候中意于Prism.Forms框架?本章为你揭晓. 实例代码地址:https://github.com/NewBLife/XamarinDemo/tree/master/TextToSpeechDemo DependencyService 1.简介 软件开发有一个原则叫[依赖倒置Dependence Inversion Principle ] A.高层次的模块不应该依赖于低层次的模块,