angularjs - 如何在访问 IdentityServer 的同一旅程中获取 Angular 中的访问 token - MVC、WebApi 和 Angular

标签 angularjs asp.net-mvc asp.net-web-api oauth identityserver3

我的布局

IdentityServer 项目:

  • MVC 客户端(隐式工作流程)
  • API 客户端(客户端凭据 工作流程)

WebApi 项目:

  • 业务逻辑和数据库访问
  • 仅请求“api”范围

MVC 项目:

  • 请求“openid 配置文件角色 api”范围
  • 请求“id_token token ”
  • Angular 应用访问安全 API(当前访问 token 未添加到 header 中)

我在做什么

我的 MVC 已得到正确保护,并且 ResourceAuthorize() 按预期工作。 我目前正在制作我的 Angular 应用程序,将不记名 token 添加到我们的 API 调用中。

我的疑问

访问 MVC 时,用户会被重定向到 IdSrv,登录,然后重定向回 MVC。 此时,我的 Angular 应用程序首次加载,显然我没有或不需要用户名和密码。

访问 token 已经发出,但我不知道如何/何时将其提供给 Angular 应用程序。

我的想法

  1. 使用 razor 将其注入(inject)我的布局页面。
  2. 将 MVC 切换到授权代码工作流程,并再次访问 IdServ 请求访问 token [嗯,但是等等...如何将授权代码转换为 Angular?我想我仍然遇到同样的问题..??]
  3. 使 Angular 使用客户端凭据工作流程,假设如果我进入 Angular 应用程序,用户已通过身份验证[但我存在安全漏洞,对吗?]

请为我指出正确的方向。 我似乎找不到哪个示例的功能与我需要的类似。

提前致谢, 害羞。

最佳答案

最终使用 Razor 注入(inject) token 和用户数据,然后通过 window.user 使用 Angular 获取它。

<script>
    window.user = @Html.JsonRaw(ViewBag.User as ClientSideIdentity);
</script>

public class ClientSideIdentity
{
    public string id { get; set; }
    public string username { get; set; }
    public string displayName { get; set; }
    public Dictionary<string, string> claims { get; set; }
    public string[] roles { get; set; }
}

关于angularjs - 如何在访问 IdentityServer 的同一旅程中获取 Angular 中的访问 token - MVC、WebApi 和 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278027/

相关文章:

javascript - 如何仅使用 $http.get 获取数据

javascript - 如何在 Angular javascript中打印列表?

asp.net-mvc - IIS Express 上的 ASP.NET Core 3.1 应用程序 : "This site can' t be reached"

c# - 添加凭据 header 时出现 ASP.NET Web API 401

c# - 如何在 Entity Framework 中使用 join 使输出 Json 对象分级别 - 不是同一级别

javascript - $http 调用似乎产生无限 $digest 循环

javascript - <object> 中的 SVG 未显示在 IE 中的 Angular 2 组件中

c# - 在 vb.net 网站中设置 c# web api

css - DisplayFor 显示在与 LabelFor MVC 不同的行上

asp.net-mvc - 类型存在于两个库中