[英]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.