繁体   English   中英

登录的MSAL和AD B2C问题

[英]MSAL and AD B2C issues with login

我花了很多时间尝试理解和正确使用MSAL,但我仍在努力。 我遇到了很多问题,我不确定该怎么做/做错了什么。

这是我所拥有的:

1)从github下载的Active-Directory-B2C-Javascript-Angular2.4-spa应用程序。

2)我将其重新配置为使用我创建的B2C租户

3)我可以通过Facebook登录或创建自己的帐户(有时)

从这里开始,我现在正面临两个问题:AcquireTokenSilent-始终失败,并最终调用了acquireTokenPopup(它似乎会弹出一个窗口)。 所以我不确定为什么acquireTokenSilent会失败,但是当它调用acquireTokenPopup时,弹出窗口会被阻止。

1)我认为acquireTokenSilent失败可能是由于我请求的“作用域”。 我已经浏览了Azure文档,但不了解如何创建范围,因此有点困扰。 我可以使用默认值吗? 我尝试了一个空字符串,但失败了。 我还尝试了https://myapp.onmicrosoft.com/demoapi/demo.read ,这没有任何意义,但我还是尝试了一下(没有意义,因为我在任何地方都看不到)。

2)我以为可能删除我现在在每个浏览器中默认的弹出窗口阻止程序,可能会导致AcquisitionTokenPopup工作。 INSTEAD:它仍然失败,但是当我调用loginPopup时,它将两次打开登录窗口。 是的两次。 我调试了代码以确保没有两次调用loginPopup。 我不是

有人可以解释为什么在弹出窗口阻止程序时代图书馆甚至会尝试使用此代码吗? 让某人启用弹出窗口只是为了使用您的应用程序似乎太过古老了……这个库有办法解决吗?

有人有什么建议吗?

按照github存储库上的自述文件,您可以按原样克隆和运行该应用程序,以演示使用它们提供的示例Web API登录的情况( https://aadb2cplayground.azurewebsites.net )。 此Web api已通过使用名为“ fabrikamb2c.onmicrosoft.com”的Azure AD租户进行保护。 您可以通过访问该站点的根URL来查看此内容:

AADB2CPlayground的屏幕截图

为了使示例能够在此站点上调用Web api操作,您需要在其信任的受众发出的请求标头中向其发送一个OpenIDConnect访问令牌(JWT)。 受众由使用B2C Azure刀片界面创建的新B2C应用程序接收的AppID表示。 此外,访问令牌需要指定在对租户进行身份验证时使用的策略。

如果单击操场上站点上的“应用程序设置”,然后单击“使用AAD B2C游乐场示例目录”,则可以看到在github示例存储库中预设的相同值:

AAD B2C游乐场设置

在您的方案中,您尝试使用SPA存储库来调用示例Web服务。 显然,Playground网站对您的回购协议一无所知,因此您需要提供设置,以便它知道如何针对租户验证令牌。 我还没有尝试过,但是我想如果您用自己的租户用适当的值填充“应用设置”输入,则该示例将起作用,因为Playground示例现在知道如何与您的租户进行通信。

显然,我不会在这里使用任何生产租户设置!

当您希望SPA应用程序访问自己的WebAPI时,您需要使用自己的租户保护双方,但是每个人都可以使用自己的B2C应用程序。 如果您使用包含WebAPI B2C应用程序的AppID和范围的令牌对SPA应用程序进行身份验证,则将授予您访问权限,因为生成的令牌将使用WebAPI的受众群体值。

1)我认为acquireTokenSilent失败可能是由于我请求的“作用域”。 我已经浏览了Azure文档,但不了解如何创建范围,因此有点困扰。 我可以使用默认值吗? 我尝试了一个空字符串,但失败了。 我还尝试了https://myapp.onmicrosoft.com/demoapi/demo.read ,这没有任何意义,但我还是尝试了一下(没有意义,因为我在任何地方都看不到)。

对于范围,您需要将其设置为“ https://fabrikamb2c.onmicrosoft.com/demoapi/demo.read ”。 在FabrikamB2C租户上,将有一个AppID为“ https://fabrikamb2c.onmicrosoft.com/demoapi ”的B2C应用程序,并且将定义一个名为“ demo.read”的范围,Playground站点将在您的传入令牌中查找该范围确保您有权访问需要在令牌中定义该范围的端点。

2)我以为可能删除我现在在每个浏览器中默认的弹出窗口阻止程序,可能会导致AcquisitionTokenPopup工作。 INSTEAD:它仍然失败,但是当我调用loginPopup时,它将两次打开登录窗口。 是的两次。 我调试了代码以确保没有两次调用loginPopup。 我不是

有人可以解释为什么在弹出窗口阻止程序时代图书馆甚至会尝试使用此代码吗? 让某人启用弹出窗口只是为了使用您的应用程序似乎太过古老了……这个库有办法解决吗?

验证时倾向于实现弹出窗口,以避免破坏用户通过应用程序的流程。 如果令牌到期并且没有有效的刷新令牌可使用,则您的应用程序将无法访问另一个令牌,因此它必须要求用户再次进行身份验证。 如果用户处于操作中间(例如,保存数据),则有可能在单独的窗口中在操作之外进行恢复,而不是强制用户重定向。 但是,我不太熟悉SPA的实现,因此其他知识渊博的人可能会有更多有效的输入!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM