我一直在尝试使用IdentityServer3并观看了视频,然后通过在线文档,下载了样本,我的样本都运行良好。
我已经设置了两个独立的身份服务器,一个用于保护Web api,另一个用于保护MVC应用。我已经这样做了,而不是两个都有一个id服务器,因为这两个应用程序主要针对两个不同的客户,只有少数用户是共同的。
但是,我确实希望能够从mvc应用程序(mvc_B,idsvr_B)为某些用户(单点登录)调用web api(api_A,idsvr_A)。
如果我在两端使用相同的idsvr,我发现这样可以正常工作,但我认为我应该能够让mvc_B从idsvr_B获取访问令牌,将其添加到调用api_A的请求并拥有idsvr_A对令牌中的声明采取行动?
我发现idsvr_A不理解(?)来自idsvr_B的令牌,当我尝试检查上下文中的声明列表时。在api_A的断点中,它是空的&主体未设置为idsvr_B中的标识:
e.g。在源自ResourceAuthorizationManager的类中,
中的上下文CheckAccessAsync(ResourceAuthorizationContext context)
方法在context.Principal上以空索赔列表结束。
我是否需要做些什么来将声明从一个idsvr转换为另一个?或者我没有正确设置?我认为,由于访问令牌格式是标准的,令牌可以在id服务器之间互换吗?
在我进行进一步调试以确保正确传递和接收令牌之前,我确实要求确认此应正常工作。
答案 0 :(得分:2)
据推测,两个身份服务器将具有不同的颁发者名称和不同的签名证书 - 所以不 - 除非为每个身份服务器添加一个验证中间件,否则web api将不会同时接受这两者。
API很少信任多个发卡机构但技术上可行。