【发布时间】:2016-08-31 21:20:36
【问题描述】:
我有一个 C# Web API REST 服务后端,我为 CMS、网页和 Angular2 应用程序提供服务(这是相关的这里)。 Angular 应用程序需要通过后端发送用户名和密码(原始凭据)进行身份验证,后端使用这些向 Azure Active Directory 请求 access_token(使用UserCredentials),并将 access_token 发送回 Angular 应用程序,以便用于在其请求中进行授权 (Authorization: Bearer)。这是我验证的方式:
UserCredential uc = new UserPasswordCredential(user, password);
AuthenticationContext authContext = new AuthenticationContext(Constants.authority, false);
AuthenticationResult result = authContext.AcquireTokenAsync(Constants.audience, Constants.clientIdNative, uc).Result;
问题是它会为该令牌生成一小时的缓存,如果用户注销并再次输入用户或用户 + 错误的密码,身份验证只是查找该用户的缓存并忽略或不t 验证密码。在一小时内,任何人都可以通过用户名进入。
我在这里和许多其他网站上找到了注销或清除令牌的方法,但这些不适用于我的后端,因为它是无状态的。我不管理它们之间的会话或 HTTP 上下文。如果有人可以指导解决这个问题,我正在使用 Microsoft.IdentityModel.Clients.ActiveDirectory 的最后一个程序集,版本 3.13.1.846,我知道 AcquireTokenByAuthorizationCodeAsync 方法不会查找缓存,但没有与原始凭据一起使用的实现。
谢谢大家,希望你们能帮助我。
【问题讨论】:
-
当我输入答案时,您介意分享一下为什么您使用
AuthenticationContext(string authority, bool validateAuthority)构造函数并将validateAuthority设置为false? -
嗨@PhilippeSignoret,因为我真的不明白它会进行什么样的地址验证?我应该将其设置为 true 吗?我是 Azure 东西和 azure Active Directory 身份验证的新手。
-
是的,最好使用不更改默认值的默认构造函数(
true),除非您确定知道权限验证的含义以及禁用它的安全隐患。此构造函数的文档在这里(此特定构造函数自 v2 以来没有,这是引用的版本):msdn.microsoft.com/en-us/library/dn528729.aspx
标签: c# azure azure-active-directory adal