首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ADFS4.0 OAuth2令牌获取组索赔

使用ADFS4.0 OAuth2令牌获取组索赔
EN

Stack Overflow用户
提问于 2017-05-09 15:03:11
回答 2查看 6.5K关注 0票数 2

我成功地设置了一个ADFS4.0实例(Windows 2016),我打算使用该实例来验证和授权面向WebApi的单页应用程序的用户。

我基本上遵循了这个教程:https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/development/single-page-application-with-ad-fs ..。它正在修改使用Azure的示例。

现在.。一切看起来都很好,我可以从/oauth2/authorize端点获得一个基本的JWT令牌:

代码语言:javascript
复制
{
  "aud": "d668d637-7fd4-45ef-9eab-46fee230dcbc",
  "iss": "https://fs.contoso.com/adfs",
  "iat": 1494341035,
  "exp": 1494344635,
  "auth_time": 1494341035,
  "nonce": "c91e3f78-c31a-402e-a685-8d1586915227",
  "sub": "Rl7sOj0nDbgh8BVWZegrkvgAKaB/SwNuEbmORcWcae4=",
  "upn": "john.doe@contoso.com",
  "unique_name": "CONTOSO\\JohnDoe"
}

来自AzureAD的令牌包含更多的属性,特别是family_namegiven_name。但我也希望在令牌中添加明确的组声明。我认为我应该能够通过在Web应用程序属性(应用程序组-> MyApp -> MyApp - WebApplication -> Properties)中正确设置“发布转换规则”来实现这一点。但是,不管我做什么,似乎对端点返回的JWT中包含的属性没有任何影响。我总是得到完全相同的标记结构。

我不太清楚“传出声明”是如何映射到令牌属性的,因为除了“UPN”和“唯一名称”之外,什么都没有传递。我在这里可能做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2017-05-11 12:40:09

正如nzpcmad的答案所示,似乎不支持在id_token中使用默认的URL参数编码的GET重定向的自定义声明。原因可能是有一个URL长度限制,但我发现这是相当值得怀疑的。

无论如何,当令牌在POST重定向中返回时,此限制显然不适用。这也是为什么人们描述它在MVC应用程序中工作得很好的原因。

因此,我能够通过将响应重定向到后端API端点(POST)来解决这个问题,后者只是再次将其重定向到前端(SPA),但作为带有URL端编码参数的GET请求:

代码语言:javascript
复制
public class LoginController : ApiController
{
    [HttpPost]
    [Route("login")]
    public HttpResponseMessage Login(FormDataCollection formData)
    {
        var token = formData["id_token"];
        var state = formData["state"];
        var response = Request.CreateResponse(HttpStatusCode.Moved);
        var frontendUri = ConfigurationManager.AppSettings["ad:FrontendUri"];
        response.Headers.Location = new Uri($"{frontendUri}#id_token={token}&state={state}");
        return response;
    }
}

注意,要将响应方法从GET更改为POST,只需将&response_mode=form_post添加到OAuth请求URL。

票数 7
EN

Stack Overflow用户

发布于 2017-05-09 19:08:03

Windows Server 2016是ADFS 4.0。

SPA使用OAuth隐式流,并且有大量的帖子表明这个流不允许额外的声明,特别是当您使用ADAL时。

例如ADFS 4.0,Adal JS -无索赔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43873379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档