我正在为我的应用程序(客户端凭据流)进行OAuth 2.0身份验证。我将Identity Server,ASP.NET Web Api作为一个应用程序,我将其作为客户端应用程序进行身份验证和控制应用程序。
当我的Web Api托管在IIS Express上时,一切正常。当我将其更改为本地IIS时,它不起作用。在IIS Express上,我将WindowsIdentity
作为请求主体,但在本地IIS上我获得了Thinktecture
,但没有声明。
我使用Owin
个库进行OAuth,public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = ConfigurationManager.AppSettings["Authority"],
RequiredScopes = new[] { "api" }
});
}
}
进行配置。这就是我的Startup类的样子:
var claims = ((ClaimsIdentity)p.Identity).Claims;
var roleClaim = claims.Where(i => i.Type == "client_role").FirstOrDefault();
if (roleClaim == null)
{
return null;
}
这是我检查主要身份的方式:
private static TokenResponse GetToken()
{
var client = new OAuth2Client(new Uri(IdentityServerUri), clientId,clientScope);
return client.RequestClientCredentialsAsync("scope").Result;
}
当然,当我在本地IIS上时,我正在撤回null,因为此身份没有任何声明。
为什么我的应用在更改IIS时会改变行为?我试图在IIS配置中改变一些东西,但说实话,我是在盲目地做这件事。
有人知道这里有什么问题吗?
编辑: 我还会告诉我如何获取令牌和发送请求,这可能会导致问题。
var client = new HttpClient();
var tokenResponse = GetToken();
client.SetBearerToken(tokenResponse.AccessToken);
var result = client.GetStringAsync(requestUri).Result;
主要功能:
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
fputcsv($fp, array_values($row));
}