繁体   English   中英

OAuth 2.0无法在本地IIS上运行

[英]OAuth 2.0 not working on Local IIS

我正在为我的应用程序进行OAuth 2.0身份验证(客户端凭据流)。 我将Identity Server,ASP.NET Web Api作为要进行身份验证的应用程序,并将控制台应用程序作为客户端应用程序。

当我的Web Api托管在IIS Express上时,一切正常。 当我将其更改为Local IIS时,它不起作用。 在IIS Express上,我将ClaimsIdentity作为请求主体,但是在本地IIS上,我得到WindowsIdentity ,它没有声明。

我正在使用Thinktecture库进行OAuth和Owin进行配置。 这是我的Startup类的样子:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["Authority"],
            RequiredScopes = new[] { "api" }
        });
    }
}

这是我检查主体身份的方法:

var claims = ((ClaimsIdentity)p.Identity).Claims;
        var roleClaim = claims.Where(i => i.Type == "client_role").FirstOrDefault();
if (roleClaim == null)
{
   return null;
}

当然,当我在本地IIS上时,我会重用null,因为此标识没有任何要求。

为什么在更改IIS时我的应用程序会更改行为? 我试图更改IIS配置中的某些内容,但是老实说,我这样做是盲目的。

有人知道造成问题的原因吗?

编辑:我还将显示我如何获取令牌和发送请求,也许这是引起问题的原因。

private static TokenResponse GetToken()
{
    var client = new OAuth2Client(new Uri(IdentityServerUri), clientId,clientScope);
    return client.RequestClientCredentialsAsync("scope").Result;
 }

主功能:

var client = new HttpClient();
var tokenResponse = GetToken();
client.SetBearerToken(tokenResponse.AccessToken);
var result = client.GetStringAsync(requestUri).Result;

在IIS中,检查是否将身份验证设置为“无”。 听起来好像Windows身份验证模块已启用。 试试这篇文章

暂无
暂无

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

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