从MVC应用程序中的ClaimsPrincipal获取bootStrapContext标记

时间:2016-01-01 06:16:53

标签: asp.net-mvc asp.net-mvc-4 azure azure-active-directory

我正在开发MVC中的应用程序,我想用Azure活动目录验证我的用户。

为实现这一目标,我使用应用程序URL在Azure活动目录中创建了应用程序,并为应用程序分配了权限。

我还将我的应用程序配置为使用Azure AD身份验证。现在,当我尝试访问bootstrapContext.Token时,它始终为null。

我使用下面的方法来访问bootstrapContext。

var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext;

string userAccessToken = bootstrapContext.Token;

我搜索了这个,发现我必须更新我的web.config。所以我已将其更新如下

<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
<system.identityModel>

我的主要目标是将UserAssertion用于authContext.AcquireToken方法。 UserAssertion需要bootstrapContext.Token。

根据MvdD的建议,我也试过下面的事情

app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
    Wtrealm = realm,
    MetadataAddress = metadataUri,
    TokenValidationParameters = new TokenValidationParameters
    {
        SaveSigninToken = true
    }
});

但是现在,我正在低于错误

AADSTS50027: Invalid JWT token. AADSTS50027: Invalid JWT token. Token format not valid.

Trace ID: 0d052707-9aaf-4037-b7c9-4c4aa7cfcc72

Correlation ID: 9a00573b-cfe9-4665-ab81-c0a03eace9d8

Timestamp: 2016-02-08 05:18:01Z

所以有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

您的问题并不是很清楚您正在使用哪种协议或库。

如果您使用的是Katana中间件,则应在适当的SaveSigninToken类中设置AuthenticationOptions属性。对于WS-Federation协议,它看起来像这样: app.UseWsFederationAuthentication(

app.UseWsFederationAuthentication(
    new WsFederationAuthenticationOptions
    {
        Wtrealm = realm,
        MetadataAddress = metadataUri,
        TokenValidationParameters = new TokenValidationParameters
        {
            SaveSigninToken = true
        }
    }
);

如果您使用System.IdentityModel,则需要在IdentityConfiguration对象上设置SaveBootstrapContext属性。