OAuth 2.0不能在本地IIS上工作

本文关键字:IIS 工作 不能 OAuth | 更新日期: 2023-09-27 18:05:01

我正在为我的应用程序(客户端凭证流)进行OAuth 2.0身份验证。我有身份服务器,ASP。. NET Web Api作为我正在认证的应用程序和控制台应用程序作为客户端应用程序。

当我的Web Api托管在IIS Express上时,一切都很好。当我将其更改为本地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;
}

当然,我返回null,当我在本地IIS,因为这个身份没有任何声明。

为什么我的应用程序改变行为当我改变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;

OAuth 2.0不能在本地IIS上工作

在IIS中检查您是否将身份验证设置为none。听起来windows授权模块被启用了。试试这篇文章