-1

我们正在尝试评估多个身份提供者。对于 POC 设置一个小型 Web 应用程序,使用 IdentityModel 编写。当针对当前身份提供者在本地运行时(至少我被告知),它可以成功地进行身份验证和授权。它可以在开发人员笔记本电脑上使用 Visual Studio 和 IIS Express 正常工作。

当我将开发环境之外的应用程序发布到 POC 时,问题就开始了。应用程序发送用户名/密码并成功启动会话,但它没有收到授权令牌。结果,Web 应用程序因空令牌异常而停止。

IIS 在与开发环境相同的端口和主机上运行应用程序:https://localhost:44307,使用相同的自签名 SSL 证书。

在哪里进一步挖掘?什么是错误的 IIS 配置或应用程序中的什么?

使用 Keycloak,我们发现问题可能与标头发送的 OAuth 授权凭据有关,但 WSO2 似乎同时接受正文和标头方法。我能够使用 Postman 验证身份服务功能并接收令牌,因此身份服务应该可以工作。

WSO2 日志上没有错误。日志条目仅显示为回调 URL 颁发了授权代码。与令牌无关。

public async Task<RedirectResult> LoggedIn()
{
    var authorizeResponse = new AuthorizeResponse(Request.RawUrl);

    // Create the TokenClient
    var client = new TokenClient(
    TokenEndpoint,
    ClientId,
    ClientSecret);

    // Request the access token
    var response = await client.RequestAuthorizationCodeAsync(
    authorizeResponse.Code,
    RedirectUrl);

    System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", response.Raw + "\n");
    var claims = ValidateLocally
        ? ValidateWithHmacOrRsa(response.AccessToken)
        : await ValidateWithUserInfoEndpointAsync(response.AccessToken);

    Session["claims"] = claims;
    Session["identityToken"] = response.IdentityToken;

    return Redirect("~/");
}

预计会获得 OAuth 客户端的授权令牌。相反,在应用程序的调试日志中,我确实看到:

Connection=close&Accept=text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8&Accept-Encoding=gzip, deflate, br&Accept-Language=en-US,en;q=0.5&Host=localhost:44307&Referer=https://wso2-1.wso.local:9443/authenticationendpoint/login.do?client_id=gfvUfDTN7bnfJkWW2Z4wXvAV9Dsa&commonAuthCallerPath=/oauth2/authorize&forceAuth=false&passiveAuth=false&redirect_uri=https://localhost:44307/auth/loggedin&response_type=code&scope=openid&tenantDomain=carbon.super&sessionDataKey=687f20cf-7224-4586-8a97-b11e466ac19d&relyingParty=gfvUfDTN7bnfJkWW2Z4wXvAV9Dsa&type=oidc&sp=hellome-local&isSaaSApp=false&authenticators=BasicAuthenticator:LOCAL&TE=trailers&User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0&upgrade-insecure-requests=1

浏览器和 Windows 事件日志显示

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: token
...
Stack Trace:

[ArgumentNullException: Value cannot be null.
Parameter name: token]
   IdentityModel.Client.<GetAsync>d__6.MoveNext() +795
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
...
4

1 回答 1

0

结案。问题是自签名的 Identity Manager 证书。IIS Express 很高兴地忽略了这一点,但 IIS 更加严格,并且在内部某处默默地拒绝处理请求。然而,在任何日志中都没有任何迹象!

当身份管理器的自签名证书导入受信任的 CA 存储并使其显示为有效证书时,情况已得到解决。

于 2019-08-07T13:08:38.897 回答