Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Apps EasyAuth声称拥有.NET核心_Azure_Asp.net Core_Azure Web App Service - Fatal编程技术网

Azure Apps EasyAuth声称拥有.NET核心

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是最好的方法吗?是否有框架支持?根据您的描述,我发现了类似的方法。正如我所知,目前没有任何框架可供您实现。根据我的理解,

我想编写一些ASP.NET核心中间件,将Azure应用程序EasyAuth HTTP头转换为声明。我找到了两种方法:

  • 解析EasyAuth在HTTP头中提供的令牌。这看起来不像是一个通用的解决方案,因为我必须编写代码来解析每个身份提供者的令牌

  • 向/auth/me发出服务器端请求。这将返回一些JSON,我想将其转换为声明,但我不确定是否必须手动执行此操作,或者是否有框架支持


  • #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的链接: