繁体   English   中英

在 IIS 中发布时,C# webapp 不接收 OAuth 令牌

[英]C# webapp does not receive OAuth token, when published in IIS

我们正在尝试评估多个身份提供者。 对于 POC 设置,使用 IdentityModel 编写了一个小型 Web 应用程序。 当针对当前身份提供者在本地运行时,它可以成功地进行身份验证和授权(至少我被告知)。 它使用 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
...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM