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;
在IIS中检查您是否将身份验证设置为none。听起来windows授权模块被启用了。试试这篇文章