ASP.NET MVC -在重定向到外部页面时添加承载令牌

8mmmxcuj  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(106)

我有一个问题,其中我似乎不能通过一个头,当我重定向到另一个页面的用户。该页面需要一个承载令牌能够访问该页面,但是,Redirect方法只接受URL作为一个参数。

public ActionResult Index()
    {       
        string URL = "www.example.com"
        //write a method that redirects to a page passing a bearer token
        //response is a JSON object containing an access token from a token server

        AccessTokenModel atm = new AccessTokenModel();
        atm = Newtonsoft.Json.JsonConvert.DeserializeObject<AccessTokenModel>(response);

       //this is where I'm stuck as the Redirect parameter only accepts a URL string as parameter
        return Redirect(URL, new Request (Headers.Add("Authorization", "Bearer " + atm.access_token))); 
    }

字符串

3mpgtkmj

3mpgtkmj1#

有两种方法可以做到这一点:1-使用您重定向的URL的路由参数。但这不是一种安全的方式,因为用户将在URL中看到不记名令牌。2-您可以创建一个视图,包含一个带有隐藏字段的HTML表单元素,具有不记名令牌的值,然后从操作返回视图。在视图中,你可以在document.ready()事件处理器中使用简单的JavaScript代码自动提交表单。目标页面必须读取提交到的数据,以便它可以读取和解析令牌。3-如果您要重定向的URL位于同一个身份验证和授权子系统上,例如SSO(单点登录),您应该将页面重定向到SSO,并在身份验证后指定返回URL。因此,它将自动验证并将用户重定向到具有目的地所需的验证和授权数据的目的地URL。
对于#2:

<form id="myForm" action="YOUR_EXTERNAL_URL" enctype="application/x-www-form-urlencoded" >
    <input type="hidden" name="bearerToken" value="@ViewBag.BEARER_TOKEN" />
</form>

<script>
    $(document).ready(function(){
        $('#myForm').submit();
    }
</script>

字符串

jyztefdp

jyztefdp2#

该页面需要一个Bearer令牌才能访问该页面,然而,Redirect方法只接受URL作为参数。
除了上面的过程已经显示了另一个贡献者,首先我们应该看看你的外部页面请求格式看起来像.我的意思是,它会更好,如果你能分享你的外部页面reuqest接受参数或请求头.
例如,如果它允许显式的httpClient请求,那么我们可以发送一个带有所需头部的HttpClient请求沿着。
您可以尝试以下操作:

HttpClient _client = new HttpClient();
 var endpoint = "www.example.com";
 using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, string.Format(endpoint)))
 {
     //Extract access token
     AccessTokenModel atm = new AccessTokenModel();
     atm = Newtonsoft.Json.JsonConvert.DeserializeObject<AccessTokenModel>(response);
     //Passing Token For this Request
     requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", atm.access_token);
     HttpResponseMessage response = await _client.SendAsync(requestMessage);
     //Getting Response from  API
     dynamic resonse = JsonConvert.DeserializeObject<dynamic>(await response.Content.ReadAsStringAsync());
 }

字符串

**注意:**如果端点允许我们显式发送http请求,我们可以尝试这种方式。请确保http动词。

另一个额外的,方法,你可以考虑的是,IIS自定义请求头.这种头也可以使用IIS服务器配置以及.我建议你检查this official document for more details .

相关问题