在 Cordova/Ionic 应用程序上登录 Azure AD B2C
Posted
技术标签:
【中文标题】在 Cordova/Ionic 应用程序上登录 Azure AD B2C【英文标题】:Azure AD B2C Sign In On Cordova/Ionic App 【发布时间】:2016-12-15 22:21:49 【问题描述】:TL; DR - 有没有一种简单的方法可以在 ionic 应用上显示自定义 Azure B2C 注册策略?
我目前正在开发一个混合离子应用程序,该应用程序需要使用 Azure AD B2C API 来显示由我使用的一些后端开发人员定义的自定义登录页面。
我已尝试为此使用ADAL cordova plugin,但据我所知,无法为新的 Web 视图添加自定义策略。我尝试在 acquireTokenAsync() 调用中添加“p=B2C_1_sign-in-up-policy”作为 extraQueryParameters 选项,但这给了我一个MethodNotAllowedHttpException。
我仍然不确定 ADAL 是否/如何与 B2C 相关,因此我转而直接尝试 Azure B2C Oauth 2.0 实现。但这似乎是一个错误,因为我正在手动执行 ADAL 插件似乎已经在执行的操作。
这些都是正确的选择吗?对于 ionic 应用,是否有其他方法可以替代 Azure AD B2C 登录?
提前致谢
编辑:澄清一下,我已经让 ADAL 工作到从 ADAL 弹出默认 microsoft web 视图登录的地步,但我想显示一个自定义 Azure B2C 策略来代替这。这可能吗?
编辑 2: 弄乱 ADAL AuthenticationContext 参数后,azquireTokenAsnyc() 调用在策略上不再失败。参数如下所示:
var authContextConstants =
tenant: "[TENANT].onmicrosoft.com",
resourceUrl: "https://login.microsoftonline.com",
redirectUrl: "https://[REPLY_URL]",
clientId: "[AZURE_APP_ID]",
authority: this.resourceUrl + "/" + this.tenant,
extraQueryParams:
response_mode: "form_post",
scope: "openid offline_access",
p: "B2C_1_[SIGN_IN_POLICY]"
;
我现在的问题是弹出的 webview 覆盖是空白的。我设法将其追踪到this ADAL source file(在android上测试),它使用“/oauth2/authorize”而不是B2C Oauth2 Docs所描述的“oauth2/v2.0/authorize”
目前似乎没有办法通过cordova插件自定义它,因为它在源库中是硬编码的——我现在又被卡住了......
【问题讨论】:
如果你只想要 FB 和 Google 登录,Ionic 有相应的 API——例如 Ionic.Auth.login('google')。为什么要使用 ADAL?您想要额外的 O365 登录功能吗? 我正在尝试将 Azure AD B2C 登录集成到 ionic 应用程序中。也许我把它复杂化了......?我应该只使用Aerogear's cordova plugin之类的东西吗? 我想我真正要问的是,我怎样才能让Azure B2C Sign In 在我的应用程序中工作?? 【参考方案1】:原来 ADAL cordova 插件的 0.7.1 / 0.7.2-dev 版本使用不符合 B2C 握手 / Oauth2 要求的 ADAL 库,因此这些版本总是在代码 -> B2C 端点的令牌部分失败.
我暂时将插件创建为 This ADAL plugin B2C Patch,直到插件开发人员更新插件的 ADAL 库
【讨论】:
【参考方案2】:使用ADAL Cordova Plugin Patch For B2C和angular-jwt,我们可以在Cordova/Ionic App上实现Azure AD B2C登录
【讨论】:
小心这个路径版本,它有一些错误,随机用户没有登录。 此补丁是否适用于新的 ios 和 android 以及 cordova/ionic 版本?以上是关于在 Cordova/Ionic 应用程序上登录 Azure AD B2C的主要内容,如果未能解决你的问题,请参考以下文章
任务执行失败:processDebugResources [ Cordova / Ionic ]
每次使用 google auth、Cordova + ionic 2 都提示同意
Cordova / Ionic:在设备上模拟或运行时未处理 $http 请求
Cordova / Ionic iOS 应用程序在加载插件时挂在启动屏幕上