Asp.net Owin/Mvc添加对承载令牌身份验证的支持

Asp.net Owin/Mvc添加对承载令牌身份验证的支持,asp.net,owin,openid,adfs,adal,Asp.net,Owin,Openid,Adfs,Adal,我的目标是使用OpenId身份验证保护Asp.NETMVC操作,并支持两种类型的客户端:浏览器和本机WPF应用程序。我将使用的STS是ADFS 2016 目前,客户端浏览器运行良好。为此,我在startup类中配置了UseOpenIdConnectAuthentication。 我可以调用我的Mvc操作(使用Authorize属性进行保护),用户被重定向到STS,身份验证完成后,我返回到我的Mvc操作,并正确填写了ClaimsEntity 现在我正在尝试让一个本地WPF应用程序能够在同一个Web

我的目标是使用OpenId身份验证保护Asp.NETMVC操作,并支持两种类型的客户端:浏览器和本机WPF应用程序。我将使用的STS是ADFS 2016

目前,客户端浏览器运行良好。为此,我在startup类中配置了UseOpenIdConnectAuthentication。 我可以调用我的Mvc操作(使用Authorize属性进行保护),用户被重定向到STS,身份验证完成后,我返回到我的Mvc操作,并正确填写了ClaimsEntity

现在我正在尝试让一个本地WPF应用程序能够在同一个Web应用程序中对同一Mvc操作进行身份验证,事情变得越来越棘手。 在客户端(我的WPF应用程序),我使用ADAL和以下代码:

        var authContext = new AuthenticationContext("<MySTSUri>");

        var authResult = await authContext.AcquireTokenAsync(
                             "http://localhost:1276/openid/login",
                             "MyNativeAppId",
                             new Uri("myapp://openid"),
                             new PlatformParameters(PromptBehavior.Auto),
                             UserIdentifier.AnyUser,
                             "");

        if (!string.IsNullOrEmpty(authResult.AccessToken))
        {
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization =
                    new AuthenticationHeaderValue(authResult.AccessTokenType, authResult.AccessToken);

                HttpResponseMessage response = await httpClient.GetAsync("http://localhost:1276/openid/login");

                if (response.IsSuccessStatusCode)
                {
                    var text = await response.Content.ReadAsStringAsync();
                }
            }
        }
var authContext=newauthenticationContext(“”);
var authResult=等待authContext.AcquireTokenAsync(
"http://localhost:1276/openid/login",
“MyNativeAppId”,
新Uri(“myapp://openid"),
新的平台参数(PromptBehavior.Auto),
UserIdentifier.AnyUser,
"");
如果(!string.IsNullOrEmpty(authResult.AccessToken))
{
使用(var httpClient=new httpClient())
{
httpClient.DefaultRequestHeaders.Authorization=
新的AuthenticationHeaderValue(authResult.AccessTokenType、authResult.AccessToken);
HttpResponseMessage response=等待httpClient.GetAsync(“http://localhost:1276/openid/login");
if(响应。IsSuccessStatusCode)
{
var text=await response.Content.ReadAsStringAsync();
}
}
}
问题基本上是我不能告诉Web应用程序能够验证这种类型的ADAL请求

我在Web应用程序Owin启动文件配置中尝试了各种方法:

  • leaves使用OpenIDConnectAuthentication:这似乎不够,我被重定向到带有Web应用程序ClientId的STS
  • 使用ActiveDirectoryFederationServicesBeareAuthenticationapi,因为我知道我的STS将始终是ADFS
  • 使用OAuthBeareAuthentication
他们都没有工作

请问有人可以帮助如何实现这一点? 我走的方向对吗

如有任何想法/建议,将不胜感激

谢谢,
亚历克斯

我已经设法让它工作了。我将答案发布以备记录。
帮助我很大的是在web.config中启用Owin日志:

  <system.diagnostics>
    <switches>
      <add name="Microsoft.Owin" value="Verbose" />
    </switches>
  </system.diagnostics>
干杯,

亚历克斯

我已经设法让它工作了。我将答案发布以备记录。
帮助我很大的是在web.config中启用Owin日志:

  <system.diagnostics>
    <switches>
      <add name="Microsoft.Owin" value="Verbose" />
    </switches>
  </system.diagnostics>
干杯,
亚历克斯