1

SAP のコミュニティ ネットワークの古いブログ投稿を読んで、MYSAPSSO2 ログオン トークンのユーザー名とシステム ID を解析するための手順を見つけました。

独自の情報を作成しなくても、この情報を取得できる .NET ライブラリに出くわした人がいるかどうかに興味があります。

4

2 に答える 2

1

ログイン チケットの詳細を解析するには、SAP SSO EXT Lib (SAPSSOEXT - (SAP ノート 1040335)) の使用を検討する必要があります。これは、SAP/Portal ログイン チケットを解析するための SAP の公式かつ標準的なライブラリです。C、Java、および .NET アプリケーションで使用できます。

詳細情報
SAPSSOEXT を使用した verify.pse による SAP SSO 認証

于 2013-02-16T07:03:18.923 に答える
1

注: チケット文字列の形式によっては、このメソッドが失敗することがあります。

void SetUserNameFromTicket1(string Ticket)
{
    this.UserName = string.Empty;
    try
    {
        // Decoded Ticket "1100 \0portal:USERNAME1(char65533)\0basicauthentication\0\nUSERNAME2\0000\..."
        string TicketData = this.base64Decode(ticket);
        MessageBox.Show(strTicketData);
    }
    catch (Exception ex)
    {
        mobjLog.Debug("Exception in GetUserNameFromTicket: " + ex.Message);
    }
}
private string base64Decode(string data)
{
    string result = string.Empty;
    try
    {
        data = System.Web.HttpUtility.UrlDecode(data); 
        System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
        System.Text.Decoder utf8Decode = encoder.GetDecoder();
        // if base64 were to be embedded in a URL, the use of the forward slash would be interpreted as a URL divider rather than
        // part of the base64. As a result, other characters such as dash (-), underscore (_), period
        // (.), colon (:) and exclamation point (!) are used in some implementations.
        // http://www.sans.org/reading_room/whitepapers/auditing/base64-pwned_33759
        // base64-pwned_33759.pdf
        data = data.Replace('-', '/');
        data = data.Replace('_', '/');
        data = data.Replace('.', '/');
        data = data.Replace(':', '/');
        data = data.Replace('!', '/');
        byte[] todecode_byte = Convert.FromBase64String(data);
        int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
        char[] decoded_char = new char[charCount];
        utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
        result = new String(decoded_char);
    }
    catch (Exception ex)
    {
        mobjLog.Debug("Error in base64Decode" + ex.Message);
    }
    return result;
}
于 2012-08-25T09:06:51.390 に答える