身份验证在本地主机上工作,但不适用于生产

时间:2021-07-02 10:13:43

标签: azure-active-directory msal

当我在本地测试我的应用程序时,它可以工作,但是当我将它部署到 prod env 时它不再工作。我收到 401 错误。 应用部署在远程服务器上时是否有特定的配置?

我使用 spring boot + angular 6 + msal v1。

重现步骤 在 azure 上为 spring boot api 配置一个应用程序 在 azure 上为使用 msal 版本 1 的 angular 6 ap 配置一个应用程序 Exemple link

失败给出的日志消息

Http failure response for https://domain:8443/app-api/toto: 401 OK

这是我的 Spring Boot 配置:

@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.cors().and() // (1)
            .authorizeRequests().anyRequest().authenticated() // (2)
            .and()
            .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt); // (3)
  }
}

app.properties:

spring.security.oauth2.resourceserver.jwt.issuer-uri=https://sts.windows.net/tenantId

Angular msal 配置:

export const protectedResourceMap: [string, string[]][] = [
  ['https://graph.microsoft.com/v1.0/me', ['user.read']],
  [azureConfig.api_endpoint, ['api://appId/api_access_scop']]
];

export const unprotectedResource = [
 
];

export const scopes = [
  "api://appId/api_access_scop"
];

MsalModule.forRoot({
      auth: {
        clientId: azureConfig.applicationID,
        authority: "https://login.microsoftonline.com/" + azureConfig.tenantID,
        validateAuthority: true,
        redirectUri: azureConfig.rediretUri,
        postLogoutRedirectUri: azureConfig.rediretUri,
        navigateToLoginRequestUrl: true,
      },
      cache: {
        cacheLocation: "localStorage",
        storeAuthStateInCookie: true,
      },
    },
      {
        popUp: false,
        consentScopes: scopes,
        unprotectedResources: unprotectedResource,
        protectedResourceMap: protectedResourceMap,
        extraQueryParameters: {}
      }
    )

2 个答案:

答案 0 :(得分:0)

401 是 Unauthorized 和客户端错误响应,可能由于以下情况导致。

  1. 401 Unauthorized Error 表示请求的资源受到限制并需要身份验证,但客户端未能提供任何此类身份验证。
  2. 某些应用程序使用 401 未经授权的错误来限制来自特定 IP 地址的访问请求,因此如果身份验证不是问题,服务器端禁令可能是问题所在。
  3. 401 未授权错误的最常见原因只是输入了错误的 URL。最好仔细检查返回 401 Unauthorized Error 错误的确切 URL,以确保这是您要请求的确切资源。
  4. 大多数现代网络应用程序利用 cookie 来存储用户身份验证状态,用于通知网络应用程序用户是否处于活动状态以及应授予当前客户端(浏览器)什么样的授权 并且应该存在无效或损坏的 cookie 问题,导致服务器的身份验证不正确。
  5. 就像 cookie 一样,本地浏览器缓存也可能导致 401 未授权错误出现。对应用程序实时版本的更改与设备上已有的缓存版本冲突,有时会因此产生 401 未授权错误。尝试清除浏览器的缓存,看看是否能解决问题。
  6. 如果您最近清除了浏览器 cookie 并且问题仍然存在,则应用程序可能在您之前的会话中遇到了问题。如果服务器无法识别客户端发送的会话令牌,或者服务器出现问题表明令牌无效,您可能会因此看到 401 未授权错误。
  7. 我还建议您检查您的网络服务器配置。例如:服务器可能被配置为拒绝对某些目录或 URL 的请求,这可能会导致 401 未经授权的错误。
  8. 检查某种形式的服务器端日志。应用程序日志通常是应用程序执行操作的历史记录,服务器日志与运行应用程序的实际硬件相关。

以上点的参考是:https://airbrake.io/blog/http-errors/401-unauthorized-error

答案 1 :(得分:0)

显然,这是一个已知问题:see

当我在服务器上配置 SSL 证书时,它开始工作