首页 文章

401取消授权多租户web api的例外

提问于
浏览
1

需要帮助来验证从任何客户端应用程序到WEB API的令牌请求 . 我们已注册我们的Web API在Azure AAD中具有多租户应用程序 . 我在不同租户中注册的客户端应用程序能够从AAD获取Access令牌 . 虽然通过传递请求头的访问令牌部分向我们的 endpoints 发出Http请求,但我们收到了401未经授权的异常 . 我在浏览多租户场景时发现原因是禁用ValidateIssuer并拥有自定义处理程序 .

•是否有针对WindowsAzureActiveDirectoryBearerAuthentication实现的自定义处理程序 . 我看到人们正在使用OpenIDConnect . 但是对于WEB API,我们正在使用WindowsAzureActiveDirectoryBearerAuthentication,即在UseWindowsAzureActiveDirectoryBearerAuthentication中是否有任何等效的事件来验证访问令牌,并告诉用户是否经过身份验证?

•是否有更好的访问令牌验证标准,并告诉用户是有效用户?

•我们可以通过将持有者令牌传递给WEBAPI授权过滤器来获得用户的声明吗?或者httprequest对象声明会获取用户信息,如给定名称,租户名称,对象ID(尤其是localhost调试场景) . 如果我们可以获取这些信息,我们可以拥有自己的验证逻辑 .

请告诉我们这种方法是否是验证用户身份的最佳做法 .

1 回答

  • 0

    您可以实现自定义颁发者验证程序并将其分配给IssuerValidator属性 . 当您无法在配置中指定发布者的预定义列表并且需要一些运行时逻辑来确定您是否信任令牌中显示的颁发者时,这非常有用:

    TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
    {
          IssuerValidator = (issuer, token, tvp) =>
          {
    
               if (db.Issuers.FirstOrDefault(b => (b.Issuer == issuer)) == null)
                  return issuer;
               else
                  throw new SecurityTokenInvalidIssuerException("Invalid issuer");
          }
    }
    

    您可以解码访问令牌以获取诸如family_name / given_name之类的基本用户信息,但是您只能通过使用用户身份来获取访问令牌 .

相关问题