Azure active directory Azure AD-adaljs…如何使用此库?

Azure active directory Azure AD-adaljs…如何使用此库?,azure-active-directory,adal.js,Azure Active Directory,Adal.js,我用的是adaljs。一切似乎都很好…我可以登录,注销,太棒了 现在,一个小时后…我再次加载我的应用程序,然后!不太好。我调试并看到adalAuthenticationService.userInfo.isAuthenticated==false和adalAuthenticationService.profile==undefined 当我得到这个时我该怎么办?我如何恢复 我什么时候使用这些功能?为什么 acquireToken clearCache clearCacheForResource

我用的是adaljs。一切似乎都很好…我可以登录,注销,太棒了

现在,一个小时后…我再次加载我的应用程序,然后!不太好。我调试并看到
adalAuthenticationService.userInfo.isAuthenticated==false
adalAuthenticationService.profile==undefined

当我得到这个时我该怎么办?我如何恢复

我什么时候使用这些功能?为什么

acquireToken

clearCache

clearCacheForResource

getCachedToken

getResourceForEndpoint

getUser

注销

登录

登录进度

最重要的是,为什么不在网站上详细解释这些内容

让我们把它变成一个关于adaljs函数和属性的wiki。我们都想知道它们是做什么的,它们的用途是什么,以及如何使用它们

编辑

在我的app.js中,我有以下处理身份验证的代码:

if (adalAuthenticationService.userInfo.isAuthenticated && adalAuthenticationService.userInfo.profile) {
                var great = "everything is awesome";
                _ld.extend($scope.user,adalAuthenticationService.userInfo);
                $scope.successFullyLoggedIn($scope.user);
            } else if(!adalAuthenticationService.userInfo.isAuthenticated && !adalAuthenticationService.userInfo.profile) {

                adalAuthenticationService.clearCache();
                adalAuthenticationService.login();
            } else {
                adalAuthenticationService.clearCache();
                adalAuthenticationService.logOut();
            }

adal.js从AAD获得的令牌每一小时就会过期一次。如果您使用angular wrapper,那么只要有有效用户登录,adal就能够自动更新令牌。若您并没有使用angular包装器,那个么应用程序必须承担更新令牌的责任,这就是API的方便之处

我将试着解释他们每个人都做了什么:

acquireToken
:这是主要方法之一。接受两个参数:resourceId和callback。ResourceId是azure门户上应用程序的应用程序id。Adal首先查看缓存以检查是否已经存在令牌。如果没有,它将向AAD发送请求以获取新令牌。它将令牌或错误传递给回调,回调的签名如下:callback(err,token)

clearCache
:删除adal存储的浏览器存储中的所有项目。这是一个新的开始

clearCacheForResource
:我假设您使用的是实验版本,因为此api不是发布的1.0.12版本的一部分。这基本上会删除特定资源id的缓存项

getCachedToken
:查看caceh并返回给定资源的令牌或null

getResourceForEndpoint
:这在使用角度包装器时非常有用。这将研究用户在初始化adal时提供的端点映射。此方法的目的是将url解析为resourceId,然后将其提供给acquireToken方法

getUser
:当前登录的用户对象或null

注销
:注销用户,清除缓存并将用户重定向到postlogoutredirecturi(如果指定),否则将用户重定向到redirecturi

login
:登录用户,创建用户对象(可使用getUser访问),将id令牌保存在缓存中。初始化adal时,它还调用在应用程序级别上对config对象的回调

登录进度
:您是指登录进度吗?这只是一个内部使用的标志,用于查看是否有正在进行的活动登录

不幸的是,我们没有api指南,可以帮助人们更好地理解我们的api。我会让团队注意到这一点。谢谢


回到您的问题:您可以使用getUser()获取用户对象。如果为null,则调用logIn()方法登录用户。如果user.userName不为null,但user.isAuthenticated为false,则表示令牌已过期,请调用acquireToken方法并传递应用程序的clientId以续订令牌。另外,您要检查adalAuthenticationService.usernInfo.profile而不是adalAuthenticationService.profile。

谢谢,这很有帮助。您说过“如果您使用angular wrapper,那么只要有有效用户登录,adal将能够自动更新令牌”。我用的是angular adal包装,但没有任何更新。每小时它都会过期。查看我的编辑以了解有关我如何处理身份验证的详细信息…我是否在这里做了错误的事情?当你说“一小时后…我再次加载我的应用程序”时,你是否重新打开浏览器?如果您没有选中“记住我”或“让我登录”复选框,则必须重新登录。另外,再次加载时会发生什么情况?你看到错误了吗?或者用户注销?如果(!adalAuthenticationService.userInfo&&!adalAuthenticationService.userInfo.isAuthenticated),您可以将第二个if检查修改为以下内容:
else{
如果我在一小时后打开浏览器并再次尝试转到该应用程序,我的应用程序将看到该用户不再经过身份验证,并清除缓存并执行“注销”,这将使该用户再次登录。也许我不应该这样做?如果应用程序看到该用户不再经过身份验证(因为令牌已过期),该怎么办?检查令牌是否过期的正确方法是什么?我是否应该检查用户是否经过身份验证?您的else if语句将出现错误,即没有userInfo。如果没有userInfo,则无法检查isAuthenticated。