Azure Apps EasyAuth声称拥有.NET核心
我想编写一些ASP.NET核心中间件,将Azure应用程序EasyAuth HTTP头转换为声明。我找到了两种方法:Azure Apps EasyAuth声称拥有.NET核心,azure,asp.net-core,azure-web-app-service,Azure,Asp.net Core,Azure Web App Service,我想编写一些ASP.NET核心中间件,将Azure应用程序EasyAuth HTTP头转换为声明。我找到了两种方法: 解析EasyAuth在HTTP头中提供的令牌。这看起来不像是一个通用的解决方案,因为我必须编写代码来解析每个身份提供者的令牌 向/auth/me发出服务器端请求。这将返回一些JSON,我想将其转换为声明,但我不确定是否必须手动执行此操作,或者是否有框架支持 #2是最好的方法吗?是否有框架支持?根据您的描述,我发现了类似的方法。正如我所知,目前没有任何框架可供您实现。根据我的理解,
#2是最好的方法吗?是否有框架支持?根据您的描述,我发现了类似的方法。正如我所知,目前没有任何框架可供您实现。根据我的理解,如果您希望在使用Azure应用程序服务EasyAuth时检索所有声明,我认为您最好向内置端点发出服务器端请求
/.auth/me
,以检索声明,如下所示:
Startup.cs>配置
app.Use(异步(上下文,下一步)=>
{
//从提供的头在当前线程上创建用户
if(context.Request.Headers.ContainsKey(“X-MS-CLIENT-PRINCIPAL-ID”))
{
//从Azure读取标题
var azureAppServicePrincipalIdHeader=context.Request.Headers[“X-MS-CLIENT-PRINCIPAL-ID”][0];
var azureAppServicePrincipalNameHeader=context.Request.Headers[“X-MS-CLIENT-PRINCIPAL-NAME”][0];
#区域通过call/.auth/me提取索赔
//调用/.auth/me
var cookieContainer=新的cookieContainer();
HttpClientHandler handler=新的HttpClientHandler()
{
CookieContainer=CookieContainer
};
字符串uriString=$“{context.Request.Scheme}://{context.Request.Host}”;
foreach(context.Request.Cookies中的var c)
{
添加(新Uri(uriString)、新Cookie(c.Key、c.Value));
}
string jsonResult=string.Empty;
使用(HttpClient=newhttpclient(handler))
{
var res=await client.GetAsync($“{uriString}/.auth/me”);
jsonResult=await res.Content.ReadAsStringAsync();
}
//解析json
var obj=JArray.Parse(jsonResult);
字符串user_id=obj[0][“user_id”].Value();//user_id
//创建索赔id
列表声明=新列表();
foreach(obj[0][“用户索赔”]中的var索赔)
{
添加(新的索赔(索赔[“typ”].ToString(),索赔[“val”].ToString());
}
//将当前上下文中的用户设置为索赔主体
var标识=新的GenericEntity(azureAppServicePrincipalIdHeader);
身份。添加索赔(索赔);
#端区
//将当前线程用户设置为标识
context.User=新的GenericPrincipal(标识,null);
};
等待next.Invoke();
});
根据您的描述,我发现了一个类似的。正如我所知,目前没有任何框架可供您实现。根据我的理解,如果您希望在使用Azure应用程序服务EasyAuth时检索所有声明,我认为您最好向内置端点发出服务器端请求/.auth/me
,以检索声明,如下所示:
Startup.cs>配置
app.Use(异步(上下文,下一步)=>
{
//从提供的头在当前线程上创建用户
if(context.Request.Headers.ContainsKey(“X-MS-CLIENT-PRINCIPAL-ID”))
{
//从Azure读取标题
var azureAppServicePrincipalIdHeader=context.Request.Headers[“X-MS-CLIENT-PRINCIPAL-ID”][0];
var azureAppServicePrincipalNameHeader=context.Request.Headers[“X-MS-CLIENT-PRINCIPAL-NAME”][0];
#区域通过call/.auth/me提取索赔
//调用/.auth/me
var cookieContainer=新的cookieContainer();
HttpClientHandler handler=新的HttpClientHandler()
{
CookieContainer=CookieContainer
};
字符串uriString=$“{context.Request.Scheme}://{context.Request.Host}”;
foreach(context.Request.Cookies中的var c)
{
添加(新Uri(uriString)、新Cookie(c.Key、c.Value));
}
string jsonResult=string.Empty;
使用(HttpClient=newhttpclient(handler))
{
var res=await client.GetAsync($“{uriString}/.auth/me”);
jsonResult=await res.Content.ReadAsStringAsync();
}
//解析json
var obj=JArray.Parse(jsonResult);
字符串user_id=obj[0][“user_id”].Value();//user_id
//创建索赔id
列表声明=新列表();
foreach(obj[0][“用户索赔”]中的var索赔)
{
添加(新的索赔(索赔[“typ”].ToString(),索赔[“val”].ToString());
}
//将当前上下文中的用户设置为索赔主体
var标识=新的GenericEntity(azureAppServicePrincipalIdHeader);
身份。添加索赔(索赔);
#端区
//将当前线程用户设置为标识
context.User=新的GenericPrincipal(标识,null);
};
等待next.Invoke();
});
我创建了一个中间件,您可以使用它在.net core中通过ez auth获得正确的身份。你可以在这里看到我的答案,以及nuget和source的链接:
我创建了一个中间件,您可以使用它在.net core中通过ez auth获得正确的身份。你可以在这里看到我的答案,以及nuget和source的链接: