我正在尝试思考如何使用 Azure Active Directory 保护 Web API 资源。目前,我有一个 Angular 2 应用程序,它将用户重定向到 Azure AD 登录页面,并接收 id_token 作为返回。该 id token 在后续调用中用作不记名 token ,并且似乎有效。我的问题就在这里。
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:ClientId"],
ValidateIssuer = true
},
Tenant = ConfigurationManager.AppSettings["ida:TenantId"]
});
}
这似乎是我们验证不记名 token 的地方。我真正不明白的是它是如何工作的。每次 API 调用时它都会与 Azure AD 进行通信吗?如果是这样,这是理想的方法(就性能而言)吗?如果不是,这如何阻止某人创建自己的 token 并侵入 API?
我确信我缺少一些重要的知识来理解这一点,因此,如果您有任何我应该阅读以更好地理解这一点的资源,请提出建议。
谢谢!
最佳答案
您可以通过 TokenValidationParameters 定义要验证的属性和/或者您可以创建通知来实现您自己的验证器。
在上面的代码中,您定义了 ValidateIssuer = true
- 这意味着 Issuer 将被验证 - 否则,中间件将检查 < em>Issuer( token 中的 iss
声明)与注册应用程序的租户 ID 匹配(例如,如果应用程序是在租户 contoso.com 上注册的,则该参数将在以下情况下验证:该 token 实际上是由租户 contoso.com 颁发的)- 阻止另一个租户生成的 token 。
ValidAudience = true
告诉中间件验证生成的 token 是否确实是为您的应用程序生成的。因此无需每次都与 Azure AD 进行通信。
查看此MSDN article了解 token 验证的更多选项。
另请参阅下面一篇有关 token 验证的精彩文章:
http://www.cloudidentity.com/blog/2014/03/03/principles-of-token-validation/
关于.net - Windows Azure Active Directory 承载身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856204/