Authentication 微软Owin UseJwt

Authentication 微软Owin UseJwt,authentication,azure,asp.net-web-api,acs,jwt,Authentication,Azure,Asp.net Web Api,Acs,Jwt,我在使用UseJwtBeareAuthentication方法时遇到困难,我正在使用Microsoft Azure ACS获取令牌(使用服务标识)。JWT令牌返回到我的测试程序。在测试程序中,令牌被发送到MVC WebAPI 2。(当从Azure Active Directory获取令牌时,WAAD身份验证工作正常) 公共部分类启动 { 私有常量字符串颁发者=”https://bluebeam-us-east.accesscontrol.windows.net/"; public void Co

我在使用UseJwtBeareAuthentication方法时遇到困难,我正在使用Microsoft Azure ACS获取令牌(使用服务标识)。JWT令牌返回到我的测试程序。在测试程序中,令牌被发送到MVC WebAPI 2。(当从Azure Active Directory获取令牌时,WAAD身份验证工作正常)

公共部分类启动
{
私有常量字符串颁发者=”https://bluebeam-us-east.accesscontrol.windows.net/";
public void ConfigureAuth(IAppBuilder应用程序)
{
字符串证书humbprint=“99B25E3E31FCD24F669C260A743FBD508D21FE30”;
var-acquisition=ConfigurationManager.AppSettings[“ida:acquisition”];
app.UseErrorPage(新的ErrorPageOptions()
{
ShowEnvironment=true,
ShowCookies=false,
ShowSourceCode=true,
});
app.useWindowsAzureActiveDirectoryBeareAuthentication(
新WindowsAzureActiveDirectoryBeareAuthenticationOptions
{
观众=观众,
Tenant=ConfigurationManager.AppSettings[“ida:Tenant”]
});
app.useJWTBeareAuthentication(新的JWTBeareAuthenticationOptions
{
AllowedAudions=新[]{audience},
IssuerSecurityTokenProviders=新的IIssuerSecurityTokenProvider[]
{
新的X509CertificateSecurityTokenProvider(发行人,X509CertificateHelper.FindByThumbprint(StoreName.My,StoreLocation.LocalMachine,CertificateThumbprint.First())
},
});
}
从ACS获取令牌的代码如下:

private async void GetJwtToken()
{
尝试
{
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(IdP.Authority);
var content=newformurlencodedcontent(新字典
{
{“授权类型”、“客户端凭据”},
{“client_id”,IdP.UserName},
{“client_secret”,IdP.Password},
{“范围”,IdP.Resource}
});
var response=wait client.PostAsync(“v2/OAuth2-13”,内容);
response.EnsureSuccessStatusCode();
var jwtdata=await response.Content.ReadAsStringAsync();
var jwt=JsonConvert.DeserializeObject(jwtdata);
AccessToken=jwt.access\u令牌;
令牌类型=jwt.token\u类型;
长期失效;
if(long.TryParse(jwt.expires\u in,out expire))
{
ExpiresOn=DateTimeOffset.UtcNow.AddSeconds(expire);
}
授权=访问令牌;
}
}
捕获(HttpRequestException re)
{
回复=回复信息;
}
}
请求资源的代码(WebAPI):

private async void WebApiRequestCall()
{
尝试
{
配置SSL();
使用(var client=new HttpClient())
{
client.BaseAddress=\u BaseAddress;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
如果(!String.IsNullOrWhiteSpace(授权))
client.DefaultRequestHeaders.Add(“授权”,Authorization);
var response=await client.GetAsync(webapirest);
response.EnsureSuccessStatusCode();
Response=wait Response.Content.ReadAsStringAsync();
}
}
捕获(HttpRequestException e)
{
响应=e.消息;
}
}
解码的令牌(使用google令牌解码器,如下所示)

因此,我有以下问题:

1) 使用JWTBearToken是从ACS解码JWT令牌的正确方法吗 2) Owin中是否有任何跟踪设施可以提供身份验证管道中发生的情况


我正在使用Microsoft Own 3.0-rc1。

似乎我的代码中有一个错误,在向WebAPI发送客户端请求时,我没有为OWIN设置正确的“承载头”

从ACS接收JWT令牌后,我需要正确设置授权

private async void GetJwtToken()
{
尝试
{
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(IdP.Authority);
var content=newformurlencodedcontent(新字典
{
{“授权类型”、“客户端凭据”},
{“client_id”,IdP.UserName},
{“client_secret”,IdP.Password},
{“范围”,IdP.Resource}
});
var response=wait client.PostAsync(“v2/OAuth2-13”,内容);
response.EnsureSuccessStatusCode();
var jwtdata=await response.Content.ReadAsStringAsync();
var jwt=JsonConvert.DeserializeObject(jwtdata);
IdP.AccessToken=jwt.access\u令牌;
IdP.TokenType=jwt.token\u类型;
长期失效;
if(long.TryParse(jwt.expires\u in,out expire))
{
IdP.ExpiresOn=DateTimeOffset.UtcNow.AddSeconds(过期);
}
//确保Owin的授权标头正确
Authorization=String.Format(“{0}{1}”,“Bearer”,IdP.AccessToken)**
}
}
捕获(HttpRequestException re)
{
回复=回复信息;
}
}
根据ACS发送令牌的方式,我们还需要在WebAPI上支持对称密钥

public void ConfigureAuth(IAppBuilder应用程序)
{
var thumbPrint=ConfigurationManager.AppSettings[“ida:thumbPrint”];
var-acquisition=ConfigurationManager.AppSettings[“ida:acquisition”];
变量
Header
{
    "x5t": "mbJePjH80k9mnCYKdD-9UI0h_jA", 
    "alg": "RS256", 
    "typ": "JWT"
}
Claims
{
    "identityprovider": "https://bluebeam-us-east.accesscontrol.windows.net/", 
    "iss": "https://bluebeam-us-east.accesscontrol.windows.net/", 
    "http://schemas.microsoft.com/identity/claims/identityprovider": "revu", 
    "exp": 1406957036, 
    "nbf": 1406956676, 
    "aud": "https://bluebeam.com/Bluebeam.Licensing.WebApi/"
}