Azure AD - adaljs ...如何使用这个库?

时间:2016-09-01 00:43:59

标签: azure-active-directory adal.js

我正在使用adaljs。一切似乎都很棒......我可以登录,退出,精彩。

现在,一小时后...我再次加载我的应用程序!不是很好。我调试了,我看到adalAuthenticationService.userInfo.isAuthenticated == falseadalAuthenticationService.profile == undefined

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

我何时使用这些功能以及用于什么?

acquireToken
clearCache
clearCacheForResource
getCachedToken
getResourceForEndpoint
getUser
logOut
logIn
logOutInProgress

最重要的是,adaljs repository为什么不详细解释(或简单!)?

让我们把它变成一个关于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();
            }

1 个答案:

答案 0 :(得分:2)

adal.js从AAD获取的令牌每隔一小时后就会过期。如果你使用角度包装器,只要有一个有效的用户登录,adal就能自动更新令牌。如果你没有使用角度包装器,那么应​​用程序必须负责更新令牌,这就是api会派上用场。

我会尝试解释他们每个人的所作所为:

acquireToken:这是主要方法之一。采用2个参数: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。

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

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

logOutInProgress:你的意思是loginInProgress?这只是一个内部使用的标志,用于查看是否存在正在进行的活动登录。

不幸的是,我们没有api指南,可以帮助人们更好地理解我们的api。我会把这个带到团队的通知中。感谢。

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