外部認証サービスを含むasp.netにカスタムクレームを追加するにはどうすればよいですか?

プラタップシン

OpenId-ConnectとCookieベース認証を使用して新しいdotnetプロジェクトをセットアップしています。一部の認証サーバー(azure adなど)から受信するトークンは、RS256対称に基づいています。2つの質問があります:

1番目RS256にあるトークンにカスタム変数を追加する方法。

2番目それらをCookieで維持する方法は?

JWT.Serializersを試してみましたが、常にどこかでスタックします。

    IJsonSerializer serializer = new JsonNetSerializer();
    IDateTimeProvider provider = new UtcDateTimeProvider();
    IJwtValidator validator = new JwtValidator(serializer, provider);
    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
    var algo = new JWT.Algorithms.RSAlgorithmFactory(() => new 
    Class1().GetByThumbprint("C11B7AF7C7910DEEB2273996BAB6033D73F6DC61"));
    IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algo);

これを続けるかどうかわからない。また、HS256ではhttps://jwt.io/でトークンを編集するのは簡単でした。RS256では編集できません。

Startup.Auth.cs

public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(
        new CookieAuthenticationOptions()
        {
            AuthenticationMode = AuthenticationMode.Active,
            LoginPath = Microsoft.Owin.PathString.FromUriComponent("/Account/SignIn")
        });

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
            ClientId = clientId,
            Authority = authority,
            PostLogoutRedirectUri = postLogoutRedirectUri,
        });
}
プラタップシン

解決策を見つけました。

1番目RS256にあるトークンにカスタム変数を追加する方法。

あなたはする必要はありません。OpenId接続を使用して外部サービスから受信したトークンは、基本的に認証用であり、承認用ではありません。複数の外部認証サービスを使用する場合があります。ここにカスタムクレームを追加することはお勧めできません。また、追加する必要もありません。

2番目それらをCookieで維持する方法は?

これは、トークンを変更する可能性がある場所です。Cookieは、外部認証サービスと同じ対称暗号ではありません。カスタムクレームを追加するために、Cookie認証方法を傍受します。

これが私がそれをした方法です:

CustomSecureDataFormat.cs

public class CustomSecureDataFormat : ISecureDataFormat<AuthenticationTicket>
{
    public string Protect(AuthenticationTicket data)
    {
        if (data == null)
        {
            throw new ArgumentNullException("data");
        }
        var claims = new List<Claim>();
        //Custom claim
        claims.Add(new Claim("HairCount", "46"));
        data.Identity.AddClaims(claims);
        string audienceId = AzureADConstants.GraphResourceId;
        Guid guidClientId;
        bool isValidAudience = Guid.TryParse(AzureADConstants.ClientId, out guidClientId);
        if (!isValidAudience)
        {
            throw new InvalidOperationException("AuthenticationTicket.Properties does not include audience");
        }

        var keyByteArray = TextEncodings.Base64Url.Decode(AzureADConstants.AppKey);
        var securityKey = new SymmetricSecurityKey(keyByteArray);
        var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(
            securityKey,
            SecurityAlgorithms.HmacSha256Signature);

        var issued = data.Properties.IssuedUtc;
        var expires = data.Properties.ExpiresUtc;
        string _issuer = AzureADConstants.Authority;
        var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingCredentials);
        var handler = new JwtSecurityTokenHandler();
        return handler.WriteToken(token);
    }

    public AuthenticationTicket Unprotect(string protectedText)
    {
        if (string.IsNullOrWhiteSpace(protectedText))
        {
            throw new ArgumentNullException("protectedText");
        }

        var keyByteArray = TextEncodings.Base64Url.Decode(AzureADConstants.AppKey);
        var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(keyByteArray);
        var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(
            securityKey,
            SecurityAlgorithms.HmacSha256Signature);

        var handler = new JwtSecurityTokenHandler();
        var securityToken = handler.ReadToken(protectedText);
        string rawToken = ((JwtSecurityToken)securityToken).RawData;

        string audienceId = AzureADConstants.GraphResourceId;

        var validationParams = new TokenValidationParameters()
        {
            ValidateLifetime = false,
            ValidAudience = audienceId,
            ValidIssuer = audienceId,
            ValidateIssuer = false,
            ValidateAudience = false,
            TokenDecryptionKey = securityKey,
            IssuerSigningKey = securityKey
        };
        SecurityToken validatedToken;
        var principal = handler.ValidateToken(rawToken, validationParams, out validatedToken);
        var identity = principal.Identities;

        return new AuthenticationTicket(identity.First(), new AuthenticationProperties());
    }
}

Startup.Auth.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
    AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
    LoginPath = Microsoft.Owin.PathString.FromUriComponent("/Account/SignIn"),
    TicketDataFormat = new CustomSecureDataFormat()
});

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リンクテーブルを含むクエリにカスタムレコードを追加するにはどうすればよいですか?

分類Dev

AngularJSフォームにカスタム検証を追加するにはどうすればよいですか?

分類Dev

ボットフレームワークでカスタム認証サーバーを使用するにはどうすればよいですか?

分類Dev

JHipsterでカスタムRestfulWebサービスを追加するにはどうすればよいですか?

分類Dev

onCreateでカスタムクレームを作成するにはどうすればよいですか?

分類Dev

Geanyでカスタムテンプレートを追加するにはどうすればよいですか?

分類Dev

カスタムOpenshotBlenderテンプレートを追加するにはどうすればよいですか?

分類Dev

ARInvoiceカスタマーセレクターにカスタムフィールドを追加するにはどうすればよいですか?

分類Dev

istioで外部サービスにカスタムクライアント証明書を使用するにはどうすればよいですか?

分類Dev

ASP.NET Coreのクレームに依存しないカスタムのAuthorize属性を作成するにはどうすればよいですか?

分類Dev

カスタムクレームにアクセスするにはどうすればよいですか?

分類Dev

Web API認証サービスのAuthTicketにクレームを含めるにはどうすればよいですか?

分類Dev

iOSでカスタムクラスをカスタムフレームワークに変換するにはどうすればよいですか?

分類Dev

管理フォームにカスタム機能を追加するにはどうすればよいですか?

分類Dev

カスタムJavaScriptセレクターを作成するにはどうすればよいですか?

分類Dev

カスタムxtypeを別のビューに追加するにはどうすればよいですか?

分類Dev

認証後にASP.NetCoreのOpenIdConnectミドルウェアによって生成された認証Cookieにカスタムクレームを追加するにはどうすればよいですか?

分類Dev

ASP.NET MVCビューでユーザーがカスタムアクションフィルターによって認証されているかどうかを取得するにはどうすればよいですか?

分類Dev

Magentoのアドレスにカスタム属性を追加するにはどうすればよいですか?

分類Dev

ルートにカスタムデータを追加するにはどうすればよいですか?

分類Dev

FormArrayにカスタムバリデーターを追加するにはどうすればよいですか?

分類Dev

グリッドボタンの束を含むフレームにスクロールバーを追加するにはどうすればよいですか?

分類Dev

javascriptのカスタムコンストラクターにカスタムメソッドを追加するにはどうすればよいですか?

分類Dev

カスタムcssセレクターをスパンだけに追加するにはどうすればよいですか?

分類Dev

カスタムクラスの子をGameSceneに追加するにはどうすればよいですか?

分類Dev

カスタム名前空間にクラスを追加するにはどうすればよいですか?

分類Dev

.NET 4.5このカスタムクレームタイプを作成するにはどうすればよいですか?

分類Dev

Laravel 5で独自のカスタムクラスを追加するにはどうすればよいですか?

分類Dev

CodeMirrorにカスタムキーマップを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    リンクテーブルを含むクエリにカスタムレコードを追加するにはどうすればよいですか?

  2. 2

    AngularJSフォームにカスタム検証を追加するにはどうすればよいですか?

  3. 3

    ボットフレームワークでカスタム認証サーバーを使用するにはどうすればよいですか?

  4. 4

    JHipsterでカスタムRestfulWebサービスを追加するにはどうすればよいですか?

  5. 5

    onCreateでカスタムクレームを作成するにはどうすればよいですか?

  6. 6

    Geanyでカスタムテンプレートを追加するにはどうすればよいですか?

  7. 7

    カスタムOpenshotBlenderテンプレートを追加するにはどうすればよいですか?

  8. 8

    ARInvoiceカスタマーセレクターにカスタムフィールドを追加するにはどうすればよいですか?

  9. 9

    istioで外部サービスにカスタムクライアント証明書を使用するにはどうすればよいですか?

  10. 10

    ASP.NET Coreのクレームに依存しないカスタムのAuthorize属性を作成するにはどうすればよいですか?

  11. 11

    カスタムクレームにアクセスするにはどうすればよいですか?

  12. 12

    Web API認証サービスのAuthTicketにクレームを含めるにはどうすればよいですか?

  13. 13

    iOSでカスタムクラスをカスタムフレームワークに変換するにはどうすればよいですか?

  14. 14

    管理フォームにカスタム機能を追加するにはどうすればよいですか?

  15. 15

    カスタムJavaScriptセレクターを作成するにはどうすればよいですか?

  16. 16

    カスタムxtypeを別のビューに追加するにはどうすればよいですか?

  17. 17

    認証後にASP.NetCoreのOpenIdConnectミドルウェアによって生成された認証Cookieにカスタムクレームを追加するにはどうすればよいですか?

  18. 18

    ASP.NET MVCビューでユーザーがカスタムアクションフィルターによって認証されているかどうかを取得するにはどうすればよいですか?

  19. 19

    Magentoのアドレスにカスタム属性を追加するにはどうすればよいですか?

  20. 20

    ルートにカスタムデータを追加するにはどうすればよいですか?

  21. 21

    FormArrayにカスタムバリデーターを追加するにはどうすればよいですか?

  22. 22

    グリッドボタンの束を含むフレームにスクロールバーを追加するにはどうすればよいですか?

  23. 23

    javascriptのカスタムコンストラクターにカスタムメソッドを追加するにはどうすればよいですか?

  24. 24

    カスタムcssセレクターをスパンだけに追加するにはどうすればよいですか?

  25. 25

    カスタムクラスの子をGameSceneに追加するにはどうすればよいですか?

  26. 26

    カスタム名前空間にクラスを追加するにはどうすればよいですか?

  27. 27

    .NET 4.5このカスタムクレームタイプを作成するにはどうすればよいですか?

  28. 28

    Laravel 5で独自のカスタムクラスを追加するにはどうすればよいですか?

  29. 29

    CodeMirrorにカスタムキーマップを追加するにはどうすればよいですか?

ホットタグ

アーカイブ