Azure 授权 - 让未经身份验证的用户调用 api
Posted
技术标签:
【中文标题】Azure 授权 - 让未经身份验证的用户调用 api【英文标题】:Azure authorization - let unauthenticated user call api 【发布时间】:2022-01-15 01:31:29 【问题描述】:我有 .net core rest api with azure。我已经为我的 rest api 配置了 azure 身份验证。我想通过在标头中传递令牌来添加第二种登录方式。在天蓝色上,我更改了配置,因此现在应用程序设置为“允许未经身份验证的访问”。我还添加了中间件逻辑来检查标头中是否存在令牌,然后验证令牌,将用户添加到 http 上下文。在本地它工作得很好,但是当我将它部署到天蓝色时我遇到了问题。无论我发送什么请求,无论有没有令牌,我总是被重定向到登录页面。有可能改变这个吗?我想在后端验证令牌并根据标头中传递的令牌授予对应用程序的访问权限。 作为身份提供者,我使用 Microsoft。
【问题讨论】:
【参考方案1】:请检查是否有以下原因:
-
请检查 Azure 广告的身份验证重定向 url 中的 url 是否与代码请求 url /redirect url 中的相同。
用户通过 .AspNetCore.Identity.Application cookie 的存在得到确认。Authentication 中间件读取 cookie 并随后填充 ClaimsPrincipal。为此,
app.UseAuthentication
调用必须在 UseMvc 调用之前。所以请确保使用app.UseAuthentication() 在 app.UseMvc() 或 app.UseAuthorization() 和 app.UseEndpoints(...) 之前。Use cookie authentication without ASP.NET Core Identity | Microsoft Docs
如果一切正常,请尝试将登录重定向设置为
~/.auth/login/aad?post_login_redirect_url=/api/protectedcontroller/action
,如果登录成功,用户将被重定向到此页面。见this
还要检查您是否在公开 api 后在代码中为 azure ad 配置了范围,以及是否需要注入令牌标头来检索令牌。看看这个Tutorial
请检查这些参考:
-
Azure Apps EasyAuth claims with .NET Core - Stack Overflow
.NET Core app with Azure App Service Authentication - Stack Overflow
Asp.net core Identity successful login redirecting back to login page - Stack Overflow
【讨论】:
以上是关于Azure 授权 - 让未经身份验证的用户调用 api的主要内容,如果未能解决你的问题,请参考以下文章
401- 使用 REST API Dynamics CRM 和 Azure AD 进行未经授权的身份验证