예제 #1
0
        public override SignInIdP_Resp_SignInRP_Req SignInIdP(SignInIdP_Req req1)
        {
            AuthenticationRequest req = (AuthenticationRequest)req1;

            Contract.Assume(GlobalObjects_base.SignInIdP_Req.IdPSessionSecret == req.IdPSessionSecret);

            if (req == null)
            {
                return(null);
            }
            ID_Claim _ID_Claim = Process_SignInIdP_req(req);

            if (_ID_Claim == null)
            {
                return(null);
            }

            AuthenticationResponse resp = (AuthenticationResponse)Redir(_ID_Claim.Redir_dest, _ID_Claim);

            resp.realm    = req.realm;
            resp.identity = req.identity;
            resp.ns       = req.ns;
            resp.mode     = req.mode;

            CST_Ops.recordme(this, req, resp, true, false);

            return(resp);
        }
예제 #2
0
파일: C.cs 프로젝트: dwjsong/AuthPlatelet
        public Message invoke(Message in_msg)
        {
            CST_Ops.recordme(this, in_msg, conclusion);

            conclusion.value        = in_msg.value;
            conclusion.largestParty = in_msg.largestParty;
            conclusion.SignedBy     = in_msg.SignedBy;

            if (conclusion.value < data)
            {
                conclusion.largestParty = "Charles";
                conclusion.value        = data;
            }
            conclusion.SignedBy = "Charles";

            if (conclude(conclusion))
            {
                conclusion.certified = true;
                Console.WriteLine("The largest party is " + conclusion.largestParty + ".");
            }
            else
            {
                conclusion.certified = false;
                Console.WriteLine("Not verified.");
            }

            return(conclusion);
        }
예제 #3
0
        public override SignInRP_Resp SignInRP(SignInIdP_Resp_SignInRP_Req req1)
        {
            AuthenticationResponse req = (AuthenticationResponse)req1;

            if (req == null)
            {
                return(null);
            }

            AuthenticationConclusion conclusion = Process_SignInRP_req(req);

            if (conclusion == null)
            {
                return(null);
            }
            CST_Ops.recordme(this, req, conclusion, true);

            if (AuthenticationDone(conclusion))
            {
                return(new SignInRP_Resp());
            }
            else
            {
                return(null);
            }
        }
예제 #4
0
        public override TokenResponse callTokenEndpoint(TokenRequest req)
        {
            TokenResponse tr = base.callTokenEndpoint(req);

            CST_Ops.recordme(new OpenIDConnectNameSpace.AuthorizationServerImpl(), req, tr, typeof(OpenIDProvider).GetMethod("TokenEndpoint"), "live.com", false, false);

            return(tr);
        }
예제 #5
0
        protected AccessTokenResponse TokenEndpoint(AccessTokenRequest req)
        {
            AccessTokenEntry AccessTokenEntry;
            string           IdPSessionSecret;

            if (req == null)
            {
                return(null);
            }
            AccessTokenResponse resp = new AccessTokenResponse();

            CST_Ops.recordme(this, req, resp);
            switch (req.grant_type)
            {
            case "authorization_code":
                IdPSessionSecret = AuthorizationCodeRecs.findISSByClientIDAndCode(req.client_id /*, req.UserID*/, req.code);
                if (IdPSessionSecret == null)
                {
                    return(null);
                }
                AuthorizationCodeEntry AuthCodeEntry = (AuthorizationCodeEntry)AuthorizationCodeRecs.getEntry(IdPSessionSecret, req.client_id);
                if (AuthCodeEntry.redirect_uri != req.redirect_uri)
                {
                    return(null);
                }
                AccessTokenEntry = createAccessTokenEntry(AuthCodeEntry.redirect_uri, AuthCodeEntry.scope, AuthCodeEntry.state);
                if (AccessTokenRecs.setEntry(AccessTokenEntry.access_token, req.client_id, req.UserID, AccessTokenEntry) == false)
                {
                    return(null);
                }

                resp.access_token  = AccessTokenEntry.access_token;
                resp.refresh_token = AccessTokenEntry.refresh_token;
                resp.scope         = AccessTokenEntry.scope;
                return(resp);

            case "refresh_token":
                IdPSessionSecret = AccessTokenRecs.findISSByClientIDAndRefreshToken(req.client_id, req.UserID, req.code);
                if (IdPSessionSecret == null)
                {
                    return(null);
                }
                AccessTokenEntry = (AccessTokenEntry)AccessTokenRecs.getEntry(req.access_token, req.client_id, req.UserID);
                AccessTokenEntry newAccessTokenEntry = createAccessTokenEntry(AccessTokenEntry.redirect_uri, AccessTokenEntry.scope, AccessTokenEntry.state);
                if (AccessTokenRecs.setEntry(newAccessTokenEntry.access_token, req.client_id, req.UserID, newAccessTokenEntry) == false)
                {
                    return(null);
                }
                resp.access_token  = AccessTokenEntry.access_token;
                resp.refresh_token = AccessTokenEntry.refresh_token;
                resp.scope         = AccessTokenEntry.scope;
                return(resp);

            default:
                return(null);
            }
        }
예제 #6
0
        public Message invoke(Message in_msg)
        {
            Message out_msg = new Message();

            CST_Ops.recordme(this, in_msg, out_msg);

            out_msg.value        = data;
            out_msg.largestParty = "Alice";
            out_msg.SignedBy     = "Alice";

            return(out_msg);
        }
예제 #7
0
        public bool conclude(ValidateTokenResponse tresq)
        {
            AuthorizationConclusion conclusion = new AuthorizationConclusion();

            conclusion.UserID      = tresq.UserID;
            conclusion.Realm       = tresq.Realm;
            conclusion.permissions = tresq.claimed_scope;

            CST_Ops.recordme(this, tresq, conclusion, false, true);
            conclusion = pre_AuthDone(conclusion);

            return(ResourceRequestDone(conclusion));
        }
        public TokenRequest constructTokenRequest(AuthenticationResponse codeResp)
        {
            TokenRequest tokenReq = new TokenRequest();

            tokenReq.code         = codeResp.code;
            tokenReq.grant_type   = "authorization_code";
            tokenReq.redirect_uri = return_uri;
            tokenReq.client_id    = client_id;
            tokenReq = pre_send_TokenRequest(tokenReq);

            CST_Ops.recordme(this, codeResp, tokenReq);

            return(tokenReq);
        }
예제 #9
0
        public virtual bool AuthenticationDone(AuthenticationConclusion conclusion)
        {
            bool CST_verified = CST_Ops.Certify(conclusion);

            if (CurrentSession["UserID"] != null)
            {
                CurrentSession["UserID"] = CST_verified?conclusion.SessionUID:"";
            }
            else
            {
                CurrentSession.Add("UserID", CST_verified ? conclusion.SessionUID : "");
            }
            return(CST_verified);
        }
예제 #10
0
        public AuthenticationRequest RequestAuthentication(AuthenticationResponse resp)
        {
            var req = new AuthenticationRequest();

            req.realm      = this.Domain;
            req.identity   = "http://specs.openid.net/auth/2.0/identifier_select";
            req.ns         = "http://specs.openid.net/auth/2.0";
            req.claimed_id = "http://specs.openid.net/auth/2.0/identifier_select";
            req.mode       = "checkid_setup";
            req.return_to  = this.Domain;
            CST_Ops.recordme(this, resp, req);

            return(req);
        }
예제 #11
0
        public AuthenticationConclusion conclude(TokenResponse tokenResp)
        {
            AuthenticationConclusion conclusion = new AuthenticationConclusion();

            conclusion.SessionUID = tokenResp.id_token.Claims.UserId;

            CST_Ops.recordme(this, tokenResp, conclusion, false, true);

            conclusion = pre_AuthDone(conclusion);
            if (AuthenticationDone(conclusion))
            {
                return(conclusion);
            }
            return(null);
        }
예제 #12
0
        public ValidateTokenRequest createValidateTokenRequest(ResourceRequest res_req)
        {
            ValidateTokenRequest vtreq = new ValidateTokenRequest();

            vtreq.access_token = res_req.access_token;
            vtreq.scope        = res_req.scope;
            vtreq.UserID       = res_req.UserID;
            vtreq.client_id    = this.Realm;

            vtreq = pre_ValidateTokenRequest(vtreq);

            CST_Ops.recordme(this, res_req, vtreq);

            return(vtreq);
        }
예제 #13
0
파일: B.cs 프로젝트: dwjsong/AuthPlatelet
        public Message invoke(Message in_msg)
        {
            Message out_msg = new Message();

            CST_Ops.recordme(this, in_msg, out_msg);
            out_msg.value        = in_msg.value;
            out_msg.largestParty = in_msg.largestParty;

            if (out_msg.value < data)
            {
                out_msg.value        = data;
                out_msg.largestParty = "Bob";
            }
            out_msg.SignedBy = "Bob";
            return(out_msg);
        }
예제 #14
0
        public override AuthTicket_Resp ValidateTicket(AuthTicket_Req vtr)
        {
            Contract.Assume(vtr == GlobalObjects_base.AuthTicket_Req);

            ValidateTokenRequest req = (ValidateTokenRequest)vtr;

            AccessTokenEntry tokenEntry = (AccessTokenEntry)AccessTokenRecs.getEntry(req.access_token, req.client_id, req.UserID);

            if (req.client_id != tokenEntry.Realm || req.UserID != tokenEntry.UserID || tokenEntry.permissions.permissionSet.IsSupersetOf(req.scope.permissionSet) == false)
            {
                return(null);
            }

            ValidateTokenResponse resp = (ValidateTokenResponse)Process_ValidateTicket(req, tokenEntry);

            CST_Ops.recordme(this, req, resp, false, false);

            return(resp);
        }
예제 #15
0
        public TokenResponse TokenEndpoint(TokenRequest req)
        {
            IDTokenAndAccessTokenEntry IDTokenAndAccessTokenEntry;
            TokenResponse resp = new TokenResponse();

            CST_Ops.recordme(this, req, resp, false, false);
            string IdPSessionSecret;

            if (req == null)
            {
                return(null);
            }
            switch (req.grant_type)
            {
            case "authorization_code":
                IdPSessionSecret = AuthorizationCodeRecs.findISSByClientIDAndCode(req.client_id /*, req.UserID*/, req.code);
                if (IdPSessionSecret == null)
                {
                    return(null);
                }
                AuthorizationCodeEntry AuthCodeEntry = (AuthorizationCodeEntry)AuthorizationCodeRecs.getEntry(IdPSessionSecret, req.client_id);

                if (AuthCodeEntry.Redir_dest != req.redirect_uri)
                {
                    return(null);
                }

                IDTokenAndAccessTokenEntry = (IDTokenAndAccessTokenEntry)createAccessTokenEntry(AuthCodeEntry.redirect_uri, AuthCodeEntry.scope, AuthCodeEntry.state);
                if (IDTokenAndAccessTokenRecs.setEntry(req.access_token, req.client_id, AuthCodeEntry.UserID, IDTokenAndAccessTokenEntry) == false)
                {
                    return(null);
                }

                resp.access_token           = IDTokenAndAccessTokenEntry.access_token;
                resp.refresh_token          = IDTokenAndAccessTokenEntry.refresh_token;
                resp.scope                  = IDTokenAndAccessTokenEntry.scope;
                resp.id_token               = IDTokenAndAccessTokenEntry.id_token;
                resp.id_token.Claims.UserId = AuthCodeEntry.UserID;
                return(resp);
            }
            return(null);
        }
예제 #16
0
        public override ValidateTokenResponse callValidateTokenEndpoint(ValidateTokenRequest treq)
        {
            ValidateTokenResponse vtr             = new ValidateTokenResponse();
            FBPermssionData       fbPermssionData = new FBPermssionData();

            string url = TokenEndpointUrl + "/" + treq.UserID + "/permissions?access_token=" + treq.access_token.token;

            HttpWebRequest             request    = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse            response   = (HttpWebResponse)request.GetResponse();
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(FBPermssionData));

            fbPermssionData = serializer.ReadObject(response.GetResponseStream()) as FBPermssionData;

            CST_Ops.recordme(new OAuth20NameSpace.AuthorizationServerImpl(), treq, vtr, typeof(AuthorizationServer).GetMethod("ValidateTicket"), "facebook.com", false, false);
            vtr.UserID       = treq.UserID;
            vtr.scope        = treq.scope;
            vtr.access_token = treq.access_token;

            return(vtr);
        }
예제 #17
0
        protected void LoginBtn_Click(Object sender, EventArgs e)
        {
            expecting_redir = true;
            YahooAuthenticationResponse req = new YahooAuthenticationResponse();

            var resp = RP.RequestAuthentication(req);

            /* HACK for Yahoo IdP */
            YahooAuthenticationRequest new_resq = new YahooAuthenticationRequest();

            new_resq.claimed_id = resp.claimed_id;
            new_resq.identity   = resp.identity;
            new_resq.return_to  = resp.return_to;
            new_resq.realm      = resp.realm;
            new_resq.ns         = resp.ns;
            new_resq.mode       = resp.mode;


            CST_Ops.recordme(new OpenID20NameSpace.AuthorizationServerImpl(), resp, new_resq, typeof(AuthorizationServerImpl).GetMethod("SignInIdP"), "yahoo.com", true, false);

            string final_url = RP.GenerateURL(new_resq);

            Response.Redirect(final_url);
        }
예제 #18
0
        public FileResult Verify(string SymT, string token)
        {
            var user = UserManager.FindById(token);

            if (user != null)
            {
                string vfolder = @"C:\CST\vprogram\";

                if (Request.Files.Count > 0)
                {
                    HttpPostedFileBase assertionFile = null, programFile = null;
                    string             assertionFileName = "Assertion.cs", programFileName = "Program.cs";
                    for (int i = 0; i < Request.Files.Count; i++)
                    {
                        HttpPostedFileBase file = Request.Files[i];

                        if (file != null && file.ContentLength > 0)
                        {
                            var fileName = Path.GetFileName(file.FileName);
                            if (file.FileName.Equals(assertionFileName))
                            {
                                assertionFile = file;
                            }
                            else if (file.FileName.Equals(programFileName))
                            {
                                programFile = file;
                            }
                        }
                    }

                    if (assertionFile != null && programFile != null)
                    {
                        byte[] time        = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
                        byte[] key         = Guid.NewGuid().ToByteArray();
                        string rand_folder = Convert.ToBase64String(time.Concat(key).ToArray());

                        string vpath = Path.Combine(vfolder, rand_folder);
                        Directory.CreateDirectory(vpath);

                        VProgramGenerator.CreateTempVFolder(vpath);
                        vpath = Path.Combine(vpath, "VProgram");

                        string assertionPath = Path.Combine(vpath, assertionFileName);
                        string programPath   = Path.Combine(vpath, programFileName);

                        var assertionFileOutStream = System.IO.File.Create(assertionPath);
                        assertionFile.InputStream.CopyTo(assertionFileOutStream);
                        assertionFileOutStream.Close();

                        var programFileOutStream = System.IO.File.Create(programPath);
                        programFile.InputStream.CopyTo(programFileOutStream);
                        programFileOutStream.Close();

                        bool result = CST_Ops.Certify(SymT, vpath);

                        if (result)
                        {
                            return(File(new byte[1], "application/octet-stream", "verified.txt"));
                        }
                        else
                        {
                            return(File(new byte[1], "application/octet-stream", "not_verified.txt"));
                        }
                    }
                }
            }
            return(null);
        }
예제 #19
0
        public virtual bool ResourceRequestDone(AuthorizationConclusion conclusion)
        {
            bool CST_verified = CST_Ops.Certify(conclusion);

            return(CST_verified);
        }
예제 #20
0
파일: C.cs 프로젝트: dwjsong/AuthPlatelet
        public bool conclude(Message msg)
        {
            bool result = CST_Ops.CertifyLocally(msg);

            return(result);
        }